为什么我的讲师写的所有C文件都以#开头?

The*_*Man 424 c c-preprocessor

为什么我的讲师写的所有C文件都以#开头?

我正在阅读一些C课程笔记,每个 C程序源文件都以程序#第一行的单个文件开头.

然后有空格,然后是其他东西后跟main函数.

是什么原因#

(现在这是不合时宜的,我不能真的问这个小伙子.)

这是一个例子(在结束时有一个额外的行#)

#

#include <stdio.h>
int main() {
   printf("Hello, World!");
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

Bat*_*eba 608

哇,这个要求可以追溯到 20世纪70年代.

在预标准化C的早期阶段,如果你想调用预处理器,那么你必须#在源文件的第一行写第一个东西.#在文件顶部写入a 可以灵活地放置其他预处理器指令.

来自伟大的丹尼斯·里奇本人的原始C选秀:

12.编译器控制线

[...]为了使[预]处理器被调用,程序的第一行必须以#开头.由于预处理器会忽略空行,因此该行不需要包含其他信息.

那个文件可以很好地阅读(并允许我像疯猫一样跳过这个问题).

我怀疑这是讲师只是多愁善感 - 从ANSI C开始就没有必要.

  • @ federico-klez-culloca如果它成为一个包含,那么该文件最终可能没有前导#,因为将来有人会删除不需要的包含而不知道引导#的副作用. (29认同)
  • 据我了解,要求不是第一个字符本身必须是一个`#`,只是它以`#`开头,为什么不直接进入`#include`?或者我理解错了? (21认同)
  • @Bathsheba"*为了使这个预处理器被调用,程序的第一行必须以#开头.由于预处理器忽略了空行,因此该行不需要包含其他信息.*"< - 所以**可以**已经包含预处理器指令,但它没有必要.... (13认同)
  • 当我开始用C(1980)编程时,这不是一个要求.ANSI C直到1989年才被标准化. (5认同)
  • @Casanova - 不.这样做并接受这样的答案违反了网站规则.如果得到我的意思,即使没有相互投票,在不同账户下询问和回答也违反了网站规则的精神.使用相同的帐户回答你自己的问题并接受答案是没有害处的 - 我过去就是这么做的. (4认同)
  • @Angew - 你错过了这一点.通过以空行开头#,然后您可以使用各种注释行(单独或共同使用有效的注释形式)跟随它,然后使用第一个#include跟随*那些*.没有人建议#曾经是C中的评论符号,但显然还有其他语言 (3认同)
  • 他们已经声明这种行为必须是_fixed_ on(参见附录2中的B.9)...... (2认同)