C语言:运算符的含义#&引用?
此代码可以通过C语言:运算符的含义#&引用?,c,C,此代码可以通过gcc-g-o main.c编译,没有警告 // main.c # 41 "stdio.h" # 22 # int main(void){ (void)printf("foo"); return 0; } 我的问题是: “include”之前的运算符“#”是什么意思。我们使用#include来包含头文件,为什么不使用include 为什么#22或#41可以编译,我以前从未见过 任何人都可以帮我吗?一行开头的#引入了预处理指令。从概念上讲,预处理是翻译的早期阶段,而
gcc-g-o main.c
编译,没有警告
// main.c
# 41 "stdio.h"
# 22
#
int main(void){
(void)printf("foo");
return 0;
}
我的问题是:
#include
来包含头文件,为什么不使用include
#22
或#41
可以编译,我以前从未见过#
引入了预处理指令。从概念上讲,预处理是翻译的早期阶段,而不是编译阶段,这就是为什么它使用易于识别的语法
如果#
后面跟有除包含
、定义
、未定义
、行
、错误
或杂注
以外的任何内容,则它是一个非指令(6.10p1),将被忽略
这意味着在一行开头的
#
是编译器在翻译阶段之间传递信息的一种简单方法;这里它被用来传递源文件和行号信息。这看起来像预处理器的输出。线路
# 41 "stdio.h"
可以解释为:
- 41具有以下含义:
只是从中获取行的文件名“stdio.h”
#
:
null指令由一个“#”后跟一个换行符组成,中间只有空格(包括注释)。null指令被理解为预处理指令,但对预处理器输出没有影响。null指令存在的主要意义在于,只包含“#”的输入行不会产生输出,而不是只包含“#”的输出行。据推测,一些旧的C程序包含这样的行
取自检查此项bro@mkpchiran:您的链接无法解释上述问题。