为什么在#include <stdio.h>之前需要#?</stdio.h>

时间:2010-07-10 04:03:22

标签: c c-preprocessor

#的功能是什么?

6 个答案:

答案 0 :(得分:16)

denotes a preprocessor directive

  

您需要记住的一件重要事情是C预处理器不是C编译器的一部分。

     

C预处理器使用不同的语法。 C预处理器中的所有指令都以井号(#)开头。换句话说,井号表示预处理程序指令的开头,它必须是该行上的第一个非空格字符。

# 可能任意选择为C语法中未使用的字符。我认为@也会起作用。

如果没有表示它的字符,则可能无法区分用于预处理器的代码 - 您如何判断if (FOO)是否需要预处理?

答案 1 :(得分:5)

因为#是引入预处理程序语句的标准前缀。

在早期的C编译器中,预处理器是一个单独的程序,它将处理所有预处理器语句(类似于早期C ++“编译器”的方式,如cfront生成的C代码)并为编译器生成C代码(它可能仍然是一个单独的程序,但它现在也可能只是编译器的一个阶段。)

#符号只是一个有用的字符,可由预处理器识别并采取行动,例如:

#include <stdio.h>
#if 0
#endif
#pragma treat_warnings_as_errors
#define USE_BUGGY_CODE

等等。

答案 2 :(得分:5)

  

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

     

来源:http://www.cplusplus.com/doc/tutorial/preprocessor/

答案 3 :(得分:3)

这是因为#是一个指示器,它是一个预处理器语句

在编译代码之前的含义,它将包含文件stdio.h

答案 4 :(得分:2)

#是预处理器指令。预处理器处理源文件包含(#include),宏定义(#define)和条件包含(#if)的指令。 当预处理器遇到这个时,它将包括标题,展开宏并继续编译。它可以用于其他目的,例如使用#error指令暂停编译。这称为条件编译。

答案 5 :(得分:0)

我们知道,没有预处理器程序就不要运行。预处理器是#或#include或#define或其他。因此#include之前需要#。