c-什么时候应该使用预处理器指令而不是if语句



如果这听起来像是一个愚蠢的问题,我很抱歉,我正在学习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版本要好得多。

最新更新