2011-03-03 78 views
18

预处理器指令#if与正常if之间的区别C?我是C的新手。预处理器指令#if与正常之间的区别

+0

你问预处理器做什么?你问它是如何工作的?你真的在问什么? – 2011-03-03 02:44:19

+0

我想知道预处理器是怎么做的! – kevin 2011-03-03 02:52:59

+1

请不要喊,请问语法问题。我不知道“预处理器的工作原理”是什么意思 - 它当然不清楚S.Lott的哪一种替代品是用来识别的。 – 2011-03-03 06:02:13

回答

17

#前面的语句被称为预处理器指令。在代码实际编译之前,它们由解析器处理。从使用Google的第一次搜索结果中找到:

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

因此,#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); 
+0

所以我们可以使用我们想要的任何东西? – kevin 2011-03-03 03:17:16

+0

@kevin编号具体'int x = 1; #if X == 1'根本不起作用。 – 2011-03-03 03:30:25

4

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

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

+0

停止添加两次头文件代码对于预处理程序来说是非常有限甚至是深奥的使用...几乎“不正常”。 – 2011-03-03 06:00:29

+0

@Jim Balter根据原始问题,凯文和其他人可能会发现这些答案可能首先在代码中看到它作为标头警卫... – Zak 2011-03-03 06:25:23

+0

这没有任何理由。事实上,从原始问题来看,这是极不可能的。 – 2011-03-03 20:26:59

3

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

-1

预处理指令检查或在o其他词,#定义指令,并且在定义的情况下替换定义。因此只检查宏变量。这是在预处理阶段执行的。

正常如果或控制流标记如果检查与变量或函数返回值的条件。该检查在执行期间完成。