为什么在 #include<stdio.h> 前面需要加上 #?

9
< p > # 的作用是什么?

6个回答

17

表示一个预处理器指令

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

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

# 可能是任意选择作为C语法中未被使用的字符来表示预处理器指令,我猜 @ 也可以。

如果没有一个字符来表示它,那么就可能很难区分适用于预处理器的代码 - 你如何判断 if (FOO) 是预处理还是不应该预处理呢?


6
因为#是引入预处理器语句的标准前缀。
在早期的C编译器中,预处理器是一个单独的程序,用于处理所有预处理器语句(类似于早期的C++“编译器”如cfront生成C代码),并为编译器生成C代码(现在它仍可能是一个单独的程序,但也可能只是编译器的一个阶段)。 #符号只是一个有用的字符,可以被预处理器识别并采取措施,例如:
#include <stdio.h>
#if 0
#endif
#pragma treat_warnings_as_errors
#define USE_BUGGY_CODE

等等。


6
预处理指令是包含在程序代码中的非程序语句,而是预处理器的指令。这些行始终以井号(#)开头。预处理器在实际编译代码之前执行,因此在语句生成任何代码之前,预处理器会处理所有这些指令。
来源:http://www.cplusplus.com/doc/tutorial/preprocessor/

3
因为#是预处理器语句的指示符,这意味着在编译代码之前,它将包含文件stdio.h。

2

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


0

我们知道,在没有预处理器的情况下,程序是无法运行的。而预处理器包括 # 或 #include 或 #define 等等。因此,在 #include 前面必须加上 #。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接