当前位置:  开发笔记 > 编程语言 > 正文

为什么包括不以分号结尾的行?

如何解决《为什么包括不以分号结尾的行?》经验,为你挑选了3个好方法。

当包含库c时,该行不以分号结尾,而其他语句则以分号结束.这背后的原因是什么?



1> JustJeff..:

同样的原因#define宏没有 - 它们用于预处理器,它在编译器正确接管之前扩展了包含和定义之类的东西.


更多定义 - 预处理器在编译器运行之前运行,并且它会替换文本.#include语句将替换为引用文件的内容.将#define输入到查找表中,然后在代码中看到define时,将其替换为存储的值等等.事实上,您可以使用另一个预处理器而不是标准的预处理器,但很少人们在现实世界中这样做.

2> Alister Bulm..:

以#开头的行不是C语言本身的一部分,它们是预处理器的指令.在最初设计时,不需要分号.



3> AnT..:

"......而其他声明".

首先,预处理程序指令不是语句.Statement是仅存在于语法/语义级别的实体.在任何语法分析开始之前,预处理器指令在翻译的相对早期阶段进行处理,因此在那个阶段还没有"声明"这样的东西.而且,由于这个原因,要求以#include分号结束指令没有任何有意义的理由.事实上,按照定义,预处理程序指令占用整行,这意味着它们已经被换行符终止.任何额外的终结器都是多余的.

其次,并非所有"其他声明"都以分号结尾.例如,复合语句没有

i = 5;

{ /* <- compound statement begins here... */
  i = 10;
} /* <- ... and ends here. Note: no semicolon */

i = 15;

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有