免费注册 查看新帖 |

Chinaunix

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

[C] 请教gcc-4.3.2源代码中一语法问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-30 15:57 |只看该作者 |倒序浏览
今天看到gcc-4.3.2.tar.bz2源代码中关于_iobuf 的一行(00046),不知道是什么意思。具体如下:
\gcc-4.3.2\gcc\testsuite\gcc.c-torture\compile\920428-2.c

00036: extern struct _iobuf {
00037: int _cnt;
00038: char *_ptr;
00039: char *_base;
00040: int _bufsiz;
00041: short _flag;
00042: char _file;
00043: } _iob[];
00044: typedef unsigned long size_t;
00045: typedef char *va_list;
00046: struct _iobuf *(const char *filename, const char *type);



有些论坛上朋友说_iobuf是结构体,声明了一个外部变量。_iobuf是结构体这个我知道,但我还是不明白,
声明变量怎么会在一个括弧内部又带有"声明变量的形式",而且括弧外还有一个声明为指针的符号。
按这样理解那么:
int *(char *b , float *c);
这样的语句也是成立的吗?

论坛徽章:
0
2 [报告]
发表于 2008-09-30 16:11 |只看该作者
原帖由 lhfzu 于 2008-9-30 15:57 发表
今天看到gcc-4.3.2.tar.bz2源代码中关于_iobuf 的一行(00046),不知道是什么意思。具体如下:
\gcc-4.3.2\gcc\testsuite\gcc.c-torture\compile\920428-2.c

00036: extern struct _iobuf {
00037: int _ ...


这是测试编译器的,所以语法不一定正确,用来验证编译器能否正确编译,或者给出正确提示,总之不能死掉或生成错误代码

论坛徽章:
0
3 [报告]
发表于 2008-09-30 16:48 |只看该作者
没见过。也没这样写过。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2008-09-30 16:51 |只看该作者

回复 #2 ytl 的帖子

嗯,楼主最好实际的在 DejaGnu 中执行下这个测试,看看编译选项和输出。

论坛徽章:
0
5 [报告]
发表于 2008-09-30 20:43 |只看该作者
原帖由 lhfzu 于 2008-9-30 15:57 发表
今天看到gcc-4.3.2.tar.bz2源代码中关于_iobuf 的一行(00046),不知道是什么意思。具体如下:
\gcc-4.3.2\gcc\testsuite\gcc.c-torture\compile\920428-2.c

00036: extern struct _iobuf {
00037: int _ ...

没看明白。看到那个testsuite,不知道这段代码到底是正确的还是只是为了验证正确性而写的。

论坛徽章:
0
6 [报告]
发表于 2008-09-30 22:30 |只看该作者
这个确实有点奇.
可以去邮件列表里面去问一问.

论坛徽章:
0
7 [报告]
发表于 2008-09-30 23:44 |只看该作者
如果struct _iobuf在之前定义过那就可以直接
extern struct _iobuf _iob[];

如果没有定义过就可以声明_iob[]的时候顺便定义,也就是你看到的样子。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP