1.請寫出輸出結果?
#if MAC_IF
printf("MAC_IF = 1\n");
#elif MAC_IF
printf("MAC_IF = 2\n");
#else
printf("MAC_IF not defined!");
#endif
答案: MAC_IF not defined!
分析:#if 和 #elif 的常量表達式中出現了未定義的宏,它就被整數常量0所替代.
2.請寫出輸出結果?
#ifndef MAC_IF
printf("MAC_IF not defined!\n");
# define MAC_IF //定義一個空的宏
#endif
#ifdef MAC_IF
printf("MAC_IF has defined!\n");
#endif
答案:MAC_IF not defined!
MAC_IF has defined!
分析:#ifndef測試宏是否還沒有定義,如果是就進入它的代碼塊;
#ifdef正好相反,它測試宏是否已經定義,如果是就進入它的代碼塊;
3.請寫出下面的輸出結果
#define MAX_STR 0
#if defined(MAX_STR)
printf("MAX_STR is defined!\n");
#elif !defined(DEBUG) && defined(_cplusplus)
printf("C++ DEBUG is OFF\n");
#endif
答案:MAX_STR is defined!
分析:1、只能在#if 和 #elif 表達式中使用defined操作符,此時它相當於#ifdef 和 #ifndef;
2、如果宏已經被定義了,則defined表達式的值爲1,否則爲0;
3、defined操作符比#ifdef 和 #ifndef更靈活,它可以創建複雜的表達式,如:
#if !defined(DEBUG) && defined(_cplusplus)