预处理器指令#if与普通if之间的区别

预处理器指令#if和正常情况( ifC中)有什么区别? 我是C的新手。

在它们前面带#的语句称为预处理程序指令。 在实际编译代码之前,它们由解析器处理。 从第一次使用Google搜索(http://www.cplusplus.com/doc/tutorial/preprocessor/):

预处理程序指令是程序代码中包含的行,它们不是程序语句,而是预处理程序的指令。 这些行总是以井号(#)开头。 预处理器在代码的实际编译开始之前执行,因此预处理器在语句生成任何代码之前摘要所有这些指令。

所以#if将在编译时决定,如果在运行时决定“正常”。 换一种说法,

 #define TEST 1 #if TEST printf("%d", TEST); #endif 

将编译为

 printf("%d", 1); 

如果相反你写了

 #define TEST 1 if(TEST) printf("%d", TEST); 

该程序实际上将编译为

 if(1) printf("%d", 1); 

预处理器if允许您在将代码发送到编译器之前对其进行调节。 通常用于阻止标题代码被添加两次。

编辑,你的意思是C ++,因为它被标记为这样? http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/

预处理器if由预处理器处理,作为正在编译的程序的第一步。 执行程序时,在运行时处理正常if。 预处理程序指令用于启用条件编译,根据不同的已定义预处理程序常量/表达式使用代码的不同部分。 普通if用于控制执行程序中的流程。

预处理程序指令检查宏,换句话说,#define指令,并在定义时替换定义。 因此只检查宏变量。 这是在预处理阶段执行的。

正常if或控制流令牌如果检查具有变量或函数的条件返回值。 此检查在执行期间完成。