文章目录
问题一:请你描述#ifdef XX #ifdef 语法和 #ifndef XX #endif 语法?(区别:n)
- 当使用
#ifdef XX
时,它会检查是否定义了宏XX
。如果宏XX
已经被定义,则下面的代码块会被编译,否则该代码块会被忽略。
- 而当使用
#ifndef XX
时,它会检查是否未定义了宏XX
。如果宏XX
没有被定义,则下面的代码块会被编译,否则该代码块会被忽略。
- 在这两种情况下,
#endif
用于标记条件编译的结束。只有当满足条件时,#ifdef XX
或#ifndef XX
之间的代码才会被编译。
ifdef 基本语法:
#ifdef XX
// 如果宏 XX 已定义,则编译此处的代码
#else
// 如果宏 XX 未定义,则编译此处的代码
#endif
ifndef基本语法:
#ifndef XX
// 如果宏 XX 未定义,则编译此处的代码
#else
// 如果宏 XX 已定义,则编译此处的代码
#endif
问题二:阅读下面代码,看逻辑
#include <stdio.h>
#define DEBUG
int main() {
#ifdef DEBUG //如果未定义DEBUG,则不执行下面的printf,
//只是前面已经有定义DEBUG,所以下面执行printf
printf("Debug mode is enabled.\n");//(√)
#endif
#ifndef TEST //因为前面没有定义TEST,
//所以再执行下面的“TEST is not defined”
printf("TEST is not defined.\n"); //(√)
#else
printf("TEST is defined.\n");//(×)
#endif
return 0;
}
问题二输出:
Debug mode is enabled.
TEST is not defined.
问题三:和问题二的区别
#ifndef TEST //因为前面TEST未定义,所以执行下一句:定义TEST
#define TEST
#endif
#include <stdio.h>
#define DEBUG
#ifndef TEST //如果前面TEST未定义,则在此处定义它
#define TEST
#endif
int main() {
#ifdef DEBUG //这里关注 #ifndef
printf("Debug mode is enabled.\n");
#endif
#ifndef TEST //因为前面定义了,所以此处执行#else,输出“TEST is defined”
printf("TEST is not defined.\n");
#else
printf("TEST is defined.\n");
#endif
return 0;
}
问题三输出:
Debug mode is enabled.
TEST is defined.