C語言基礎

#define DEBUG 0
#ifdef DEBUG
    printf("A\n");
#endif
#if DEBUG
    printf("B\n");
#endif

把上方程式碼寫在 main 函式中執行時的輸出,下列何者正確?

  1. A只顯示 A
  2. B什麼都不顯示
  3. C顯示 A 與 B
查看答案與解析

正確答案:A. 只顯示 A

#ifdef DEBUG 只檢查是否定義了名為 DEBUG 的巨集,不看它的值。DEBUG 被定義為值0,因此條件為真,顯示 A 的敘述會被編譯。#if DEBUG 則檢查值,因為是0而為偽,顯示 B 的敘述會被去除。切換除錯用的處理時,若不統一以 #ifdef 或 #if 判斷,就會發生這種不一致。

  • A. 正確。#ifdef 只檢查是否已定義,#if 則檢查值。
  • B. 即使值為0,只要已定義,#ifdef 就為真。
  • C. #if DEBUG 因 DEBUG 的值為0而為偽,B 的敘述會被去除。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. 微控制器的輸出暫存器以上方的方式宣告並使用。關於這個宣告的說明,下列何者正確?
  2. 關於C語言標準所說的未定義行為,下列說明何者正確?
  3. int 與 unsigned int 為32位元。下列何者依C語言的標準屬於未定義行為?
  4. 以 gcc 啟用最佳化來編譯上方的函式時,if (p == NULL) 的判斷可能被刪除。其理由為下列何者?
  5. C語言的標準中,關於 int 型別的大小有何規定?下列何者正確?