免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3589 | 回复: 7
打印 上一主题 下一主题

[C] 以#号开头的是什么语句 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 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]#

论坛徽章:
0
2 [报告]
发表于 2009-07-04 23:05 |只看该作者
新手园地中也是我问的,好友建议我发到C板块,所以只好又在这里再问一下,嘻嘻!希望能够得到大家的帮助,多谢大家了!

论坛徽章:
0
3 [报告]
发表于 2009-07-05 09:32 |只看该作者
C语言中
#开头的是预处理指令,不是C语句的一部分
#开头的语句,在预处理阶段,由预处理器处理,例如:
#include <stdio.h>
预处理器会将stdio.h文件的内容加入到当前文件的头部,而
#define CONST 10
则会将文件中的CONST,用10代替(是直接代替)
预处理完毕后,才对文件进行编译。

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
4 [报告]
发表于 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 后怎么出现些以 ...



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

关注
期待详细解释

论坛徽章:
0
5 [报告]
发表于 2009-07-05 11:22 |只看该作者
这个应该让p阿姨来解释

论坛徽章:
0
6 [报告]
发表于 2009-07-05 11:24 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2009-07-05 22:45 |只看该作者

回复 #3 aaaaa5aa 的帖子

这个应该是 .i文件里的了,已经经过cpp预处理过了
这些估计是给编译器用的,没学过编译原理,具体不知道。

论坛徽章:
80
20周年集字徽章-庆
日期:2020-10-28 14:09:1215-16赛季CBA联赛之北京
日期:2020-10-28 13:32:5315-16赛季CBA联赛之北控
日期:2020-10-28 13:32:4815-16赛季CBA联赛之天津
日期:2020-10-28 13:13:35黑曼巴
日期:2020-10-28 12:29:1520周年集字徽章-周	
日期:2020-10-31 15:10:0720周年集字徽章-20	
日期:2020-10-31 15:10:07ChinaUnix元老
日期:2015-09-29 11:56:3020周年集字徽章-年
日期:2020-10-28 14:14:56
8 [报告]
发表于 2009-07-06 08:21 |只看该作者
预处理指令集合吗、
嘿嘿
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP