面试题答案
一键面试#ifdef
:- 作用:
#ifdef
用于判断某个宏是否已经被定义。如果宏已经被定义,则编译#ifdef
和与之匹配的#endif
之间的代码块;如果宏未被定义,则忽略这段代码。
- 作用:
#ifndef
:- 作用:
#ifndef
与#ifdef
相反,用于判断某个宏是否未被定义。如果宏未被定义,则编译#ifndef
和与之匹配的#endif
之间的代码块;如果宏已经被定义,则忽略这段代码。
- 作用:
#else
:- 作用:
#else
通常与#ifdef
或#ifndef
一起使用。当#ifdef
判断宏已定义或#ifndef
判断宏未定义的条件不成立时,就编译#else
和#endif
之间的代码块。
- 作用:
#endif
:- 作用:
#endif
用于标记条件编译块的结束,它与#ifdef
、#ifndef
成对出现,以明确条件编译的范围。
- 作用:
代码示例:
#include <stdio.h>
// 假设这里没有定义宏MY_MACRO
// 如果需要测试宏已定义的情况,可以在下面取消注释这行
// #define MY_MACRO
int main() {
#ifdef MY_MACRO
printf("宏已定义\n");
#else
printf("宏未定义\n");
#endif
return 0;
}
在上述代码中,通过#ifdef
判断MY_MACRO
宏是否被定义,如果定义了则输出“宏已定义”,否则通过#else
分支输出“宏未定义”。如果需要测试宏已定义的情况,将#define MY_MACRO
这行代码的注释取消即可。同样的功能也可以使用#ifndef
实现,如下:
#include <stdio.h>
// 假设这里没有定义宏MY_MACRO
// 如果需要测试宏已定义的情况,可以在下面取消注释这行
// #define MY_MACRO
int main() {
#ifndef MY_MACRO
printf("宏未定义\n");
#else
printf("宏已定义\n");
#endif
return 0;
}
这里通过#ifndef
判断MY_MACRO
宏是否未被定义,从而决定输出的内容。