如果这听起来像是一个愚蠢的问题,我很抱歉,我正在学习C,我想知道:我什么时候应该优先考虑这个语法,例如
#include <stdio.h>
#define ALIVE 1
int main(void) {
#if ALIVE
printf("Alive");
#else
printf("Unalived");
#endif
}
超过此语法(示例(:
#include <stdio.h>
#define ALIVE 1
int main(void) {
if (ALIVE)
printf("Alive");
else
printf("Unalived");
}
谢谢你花时间阅读我的问题,我希望这不是一个愚蠢的问题,祝你度过美好的一天。
对于初学者来说,为了了解所显示的两个程序之间的主要区别,让我们看看它们在预处理后的外观。
第一个:
#include <stdio.h>
#define ALIVE 1
int main(void) {
#if ALIVE
printf("Alive");
#else
printf("Unalived");
#endif
}
将扩展到
#include <stdio.h>
int main(void) {
printf("Alive");
}
第二个:
#include <stdio.h>
#define ALIVE 1
int main(void) {
if (ALIVE)
printf("Alive");
else
printf("Unalived");
}
将扩展到:
#include <stdio.h>
int main(void) {
if (1)
printf("Alive");
else
printf("Unalived");
}
[以上示例跳过头文件的实际包含]
虽然这不能直接回答您的问题,但它可以提示使用预处理器条件编译的目的。
主要用途是根据宏有条件地为编译器提供不同的代码。主要用于创建需要为不同系统(例如Linux和Windows(构建的程序时的可移植性问题。
当使用预处理器进行条件编译时,在目标系统上无效的代码的整个部分可以被省略,编译器甚至看不到它
如果使用标准的if
语句,则条件的两个分支都必须是编译器可以构建的有效代码。
根据经验,您应该始终更喜欢if (
。。。在#if
上,并且应该仅使用#if
,其中if
将不起作用
- 当if中有语法不正确的东西时,当条件为false时,它根本不会编译
- 当您需要在全局范围内执行此操作时,其中不允许使用语句(如
if
(
在您的示例中,if
版本要好得多。