为什么我的讲师写的所有C文件都以#开头?
我正在阅读一些C课程笔记,每个 C程序源文件都以程序#第一行的单个文件开头.
然后有空格,然后是其他东西后跟main函数.
是什么原因#?
(现在这是不合时宜的,我不能真的问这个小伙子.)
这是一个例子(在结束时有一个额外的行#)
#
#include <stdio.h>
int main() {
printf("Hello, World!");
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我知道CFLAGS(或CXXFLAGS for C++)是针对编译器的,而CPPFLAGS是由预处理器使用的.
但我仍然不明白其中的区别.
我需要为#include包含的头文件指定一个包含路径 - 因为#include是一个预处理器指令,是我唯一关心的预处理器(CPPFLAGS)吗?
在什么情况下我需要给编译器一个额外的包含路径?
通常,如果预处理器找到并包含所需的头文件,为什么需要告知额外的包含目录?CFLAGS有什么用?
(在我的情况下,我实际上发现这两个允许我编译我的程序,这增加了混乱...我可以使用CFLAGS 或 CPPFLAGS来实现我的目标(至少在autoconf上下文中.)给出了什么?)
因此,在浏览 C99 标准的 n869 草案时,我偶然发现了这一部分:
6.10.7 空指令语义
形式的预处理指令
Run Code Online (Sandbox Code Playgroud)# new-line没有效果。
所以,我写了这个程序来测试它:
#
#include <stdio.h>
#
int main(void)
{
puts("Hello, world!");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
果然gcc,即使我一直发出警告等,也不会对这段代码感到厌烦。我意识到语言中还有一些其他的结构并不明显,比如初始化器、枚举定义等中允许的额外逗号,但这是有目的的(例如简化代码生成器的编写)。
但是,我看不出这有什么用。任何人都可以想出一个合理的用例/理由来拥有它吗?