当包含库c时,该行不以分号结束,而其他语句则以分号结束。 这背后的原因是什么?
答案 0 :(得分:18)
相同的原因#define宏没有 - 它们用于预处理器,它在编译器正确接管之前扩展了包含和定义之类的东西。
答案 1 :(得分:10)
以#开头的行不是C语言本身的一部分,它们是预处理器的指令。首次设计时,不需要分号。
答案 2 :(得分:7)
“......而其他陈述”。
首先,预处理程序指令不是语句。 Statement 是仅存在于语法/语义级别的实体。在任何语法分析开始之前,预处理器指令在翻译的相对早期阶段进行处理,因此在那个阶段还没有“声明”这样的东西。而且,由于这个原因,要求用分号结束#include
指令没有任何有意义的理由。事实上,按照定义,预处理程序指令占用整行,这意味着它们已经被换行符终止。任何额外的终结器都是多余的。
其次,并非所有“其他声明”都以分号结尾。例如,复合语句不是
i = 5;
{ /* <- compound statement begins here... */
i = 10;
} /* <- ... and ends here. Note: no semicolon */
i = 15;
答案 3 :(得分:4)
#include
是一个预处理命令,如#define
。 #include
告诉编译器在代码实际编译之前在源代码中包含指定的文件。