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