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