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)