预处理器指令#if与普通if之间的区别
预处理器指令#if
和正常情况( if
在C中)有什么区别? 我是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或控制流令牌如果检查具有变量或函数的条件返回值。 此检查在执行期间完成。