文章目录
- 问题一:请你描述#ifdef XX #ifdef 语法和 #ifndef XX #endif 语法?(区别:n)
- ifdef 基本语法:
- ifndef基本语法:
 
- 问题二:阅读下面代码,看逻辑
- 问题二输出:
 
- 问题三:和问题二的区别
- 问题三输出:
 
- 道友:年轻人最容易丢掉的两个最重要的品质:求知的欲望与灵魂世界的丰盈;处理亲密关系的能力。前者可能决定了你的上限,而后者决定你的下限。
 
问题一:请你描述#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 未定义,则编译此处的代码
#endififndef基本语法:
#ifndef XX// 如果宏 XX 未定义,则编译此处的代码
#else// 如果宏 XX 已定义,则编译此处的代码
#endif问题二:阅读下面代码,看逻辑
#include <stdio.h>
#define DEBUG
int main() {#ifdef DEBUG  //如果未定义DEBUG,则不执行下面的printf,//只是前面已经有定义DEBUG,所以下面执行printfprintf("Debug mode is enabled.\n");//(√)#endif#ifndef TEST  //因为前面没有定义TEST,//所以再执行下面的“TEST is not defined”printf("TEST is not defined.\n"); //(√)#elseprintf("TEST is defined.\n");//(×)#endifreturn 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
#endifint main() {#ifdef DEBUG  //这里关注 #ifndefprintf("Debug mode is enabled.\n");#endif#ifndef TEST    //因为前面定义了,所以此处执行#else,输出“TEST is defined”printf("TEST is not defined.\n");#elseprintf("TEST is defined.\n");#endifreturn 0;
}
问题三输出:
Debug mode is enabled.
TEST is defined.