Chinaunix

标题: 以#号开头的是什么语句 [打印本页]

作者: yzyngn    时间: 2009-07-04 23:01
标题: 以#号开头的是什么语句
我的 a.c 的内容只有
                                       #include<limits.h>
(我只想看看这个 limits.h 头文件里是些什么东西。)
通过 [root@localhost H]# gcc -E a.c -o a.i   打开文件 a.i 后怎么出现些以#符号开头的东东呢?这些以#开头的东东什么意思?好像C语言里没有这种语法阿?


[root@localhost H]# cat a.i  
# 1 "c.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "c.c"
# 1 "/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/limits.h" 1 3 4
# 11 "/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/limits.h" 3 4
# 1 "/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/syslimits.h" 1 3 4






# 1 "/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/limits.h" 1 3 4
# 122 "/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/limits.h" 3 4
# 1 "/usr/include/limits.h" 1 3 4
# 27 "/usr/include/limits.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
# 329 "/usr/include/features.h" 3 4
# 1 "/usr/include/sys/cdefs.h" 1 3 4
# 313 "/usr/include/sys/cdefs.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 314 "/usr/include/sys/cdefs.h" 2 3 4
# 330 "/usr/include/features.h" 2 3 4
# 352 "/usr/include/features.h" 3 4
# 1 "/usr/include/gnu/stubs.h" 1 3 4



# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 5 "/usr/include/gnu/stubs.h" 2 3 4




# 1 "/usr/include/gnu/stubs-64.h" 1 3 4
# 10 "/usr/include/gnu/stubs.h" 2 3 4
# 353 "/usr/include/features.h" 2 3 4
# 28 "/usr/include/limits.h" 2 3 4
# 145 "/usr/include/limits.h" 3 4
# 1 "/usr/include/bits/posix1_lim.h" 1 3 4
# 153 "/usr/include/bits/posix1_lim.h" 3 4
# 1 "/usr/include/bits/local_lim.h" 1 3 4
# 36 "/usr/include/bits/local_lim.h" 3 4
# 1 "/usr/include/linux/limits.h" 1 3 4
# 37 "/usr/include/bits/local_lim.h" 2 3 4
# 154 "/usr/include/bits/posix1_lim.h" 2 3 4
# 146 "/usr/include/limits.h" 2 3 4



# 1 "/usr/include/bits/posix2_lim.h" 1 3 4
# 150 "/usr/include/limits.h" 2 3 4
# 123 "/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/limits.h" 2 3 4
# 8 "/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/syslimits.h" 2 3 4
# 12 "/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/limits.h" 2 3 4
# 2 "c.c" 2
[root@localhost H]#
作者: yzyngn    时间: 2009-07-04 23:05
新手园地中也是我问的,好友建议我发到C板块,所以只好又在这里再问一下,嘻嘻!希望能够得到大家的帮助,多谢大家了!
作者: aaaaa5aa    时间: 2009-07-05 09:32
C语言中
#开头的是预处理指令,不是C语句的一部分
#开头的语句,在预处理阶段,由预处理器处理,例如:
#include <stdio.h>
预处理器会将stdio.h文件的内容加入到当前文件的头部,而
#define CONST 10
则会将文件中的CONST,用10代替(是直接代替)
预处理完毕后,才对文件进行编译。
作者: openspace    时间: 2009-07-05 09:47
原帖由 yzyngn 于 2009-7-4 23:01 发表
我的 a.c 的内容只有
                                       #include
(我只想看看这个 limits.h 头文件里是些什么东西。)
通过 [root@localhost H]# gcc -E a.c -o a.i   打开文件 a.i 后怎么出现些以 ...



预处理负责包含文件和宏替换
看这里并没有展开头文件,估计是仅仅加入了涉及的文件标识
可能是在后续过程中再将实际需要的文件加到二进制代码中

关注
期待详细解释
作者: gawk    时间: 2009-07-05 11:22
这个应该让p阿姨来解释
作者: mw3943    时间: 2009-07-05 11:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: bsdc    时间: 2009-07-05 22:45
标题: 回复 #3 aaaaa5aa 的帖子
这个应该是 .i文件里的了,已经经过cpp预处理过了
这些估计是给编译器用的,没学过编译原理,具体不知道。
作者: baopbird2005    时间: 2009-07-06 08:21
预处理指令集合吗、
嘿嘿





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2