6

在 C 语言中,分号 ( ;) 用于表示语句的结束。为什么#include行不需要分号?

4

5 回答 5

12

#include#(以及所有其他以like开头的行#define)是预处理器的一部分。这实际上是一个单独的程序,在主编译器之前运行,并执行诸如文件包含到源代码和宏扩展之类的事情。

于 2012-04-04T12:44:23.100 回答
2

#include由预处理器处理,编译器看不到这些语句。因此;在语句末尾不需要。

于 2012-04-04T12:44:30.320 回答
2

因为预处理指令不是语句。

甚至不是所有的语句都必须有一个 final ;。例如:

int bla = 1;

if (bla) {
}

在声明之后bla我们有两个语句:一个if语句和一个空的复合语句。没有;,但程序是有效的。

于 2012-04-04T12:49:16.840 回答
2

该指令由预处理器处理它不是编译器,它是一个简单的文本替换处理器。它使用行尾(\n)作为重要字符,不像 C 编译器将其视为空格。也是\行尾有影响的原因。

于 2012-04-04T12:57:12.627 回答
1
#include "whatever.h"

它只是用“whatever.h”替换源文件中的那一行。所以你不需要放在;“whatever.h”的末尾。预处理器会给你一个警告并忽略它。

于 2012-04-04T12:46:53.487 回答