LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 960|回复: 11

c也有引用?

[复制链接]
发表于 2005-7-22 22:48:13 | 显示全部楼层 |阅读模式
有以下代码:

  1. int i=3
  2. int &ref_i=i;
  3. ref_i=6;
复制代码


在lcc下编译通过
用gcc编译就报错。
看来lcc很强么,可它是一个纯c的编译器,不支持c++呀

有这个实验想法是因为在看某数据结构c语言版教材,其中的例子代码就有引用,当然,它是出现在函数参数中
例如:pop_stack(STACK &ref_stka)

这明显不能编译通过阿
发表于 2005-7-23 00:03:46 | 显示全部楼层
这个在数据结构书里见过,但是说实话我c书上从来没注意过
看了大半本unp,也没见过。。。。。。。。。。。。。。难道我疏忽了?
回复 支持 反对

使用道具 举报

发表于 2005-7-23 01:06:59 | 显示全部楼层
pop_stack(STACK &ref_stka)
传的是指针
晕死。。。
回复 支持 反对

使用道具 举报

发表于 2005-7-23 08:58:45 | 显示全部楼层
这只能说是某种编译器对一些语法的扩展。不能说是C的语法。
gcc也有一大堆的C语法不承认且其他编译器编译不通过的扩展。
回复 支持 反对

使用道具 举报

发表于 2005-7-23 10:02:37 | 显示全部楼层
pop_stack(STACK &ref_stka) 这个是函数声明吧. 应表示引用. 如果是函数调用才是指针.
这段代码GCC 确是编译过不了. 换成G++就OK了. lcc 机器上没有.
估计是对语法进行了扩展吧. 不过这种代码最好还是少写了.
回复 支持 反对

使用道具 举报

发表于 2005-7-23 10:03:58 | 显示全部楼层
int a = 3;
char b[a];
这样的代码在GCC中OK,在其它编译器中就不行.
回复 支持 反对

使用道具 举报

发表于 2005-7-23 10:11:40 | 显示全部楼层
c99 动态数组:)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-23 10:15:38 | 显示全部楼层
Post by x11
pop_stack(STACK &ref_stka)
传的是指针
晕死。。。


指针的话,应该是pop_stack(STACK * ref_stka)
而内部实现应该为ref_stka->xxx

而书上用了引用之后,内部实现为ref_stka.xxx
回复 支持 反对

使用道具 举报

发表于 2005-7-23 12:14:19 | 显示全部楼层
你在gcc命令行上加上 -ansi=c99 如果还不能通过,那基本上可以说明这个不是标准里面的东西(这样做不是绝对的可以验证语法是否符合c99标准)
回复 支持 反对

使用道具 举报

发表于 2005-7-23 14:39:30 | 显示全部楼层
真晕了,没看出来是函数原型,嘿嘿,功夫还不到家,继续修炼
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表