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

时间:2011-03-03 02:38:43

标签: c if-statement c-preprocessor

预处理器指令#if C 中的正常if有何区别?我是 C 的新手。

4 个答案:

答案 0 :(得分:20)

在它们前面带#的语句称为预处理程序指令。在实际编译代码之前,它们由解析器处理。从第一次使用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);

答案 1 :(得分:5)

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

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

答案 2 :(得分:3)

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

答案 3 :(得分:-1)

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

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