读书人

ubuntu上面C 语言数组的动态分配

发布时间: 2012-11-05 09:35:12 作者: rapoo

ubuntu下面C 语言数组的动态分配

看到《linux C编程实战》书上67页说

demo111.c: 在函数‘main’中:demo111.c:5:2: 错误: 可变大小的对象不能被初始化demo111.c:5:2: 警告: 数组初始值设定项中有多余的元素 [默认启用]demo111.c:5:2: 警告: (在‘a’的初始化附近) [默认启用]demo111.c:5:2: 警告: 数组初始值设定项中有多余的元素 [默认启用]demo111.c:5:2: 警告: (在‘a’的初始化附近) [默认启用]demo111.c:5:2: 警告: 数组初始值设定项中有多余的元素 [默认启用]demo111.c:5:2: 警告: (在‘a’的初始化附近) [默认启用]demo111.c:5:2: 警告: 数组初始值设定项中有多余的元素 [默认启用]demo111.c:5:2: 警告: (在‘a’的初始化附近) [默认启用]

我主要是想说明一个道理:尽信书不如无书。所以多实践还是挺重要的。

5楼xuchao1229昨天 14:30
int n = 10; nint a[n];n这个不就是c99新添加的规则吗,VLA(变长数组)n有的编译器支持,有的编译器不支持
Re: Wang6279026昨天 15:48
回复xuchao1229n谢谢指导,由于才开始看linux好多东西不知道,以后多多指教。。
Re: xuchao1229昨天 17:40
回复Wang6279026n呵呵,一起学习,一起努力
Re: Wang6279026昨天 17:40
回复xuchao1229n恩恩。。
4楼eastcowboy昨天 12:47
自己的实验结果,只能说明自己所用的编译器如此,并不说明所有的编译器都“应该”如此。n遇到这种情况,最好的做法,是以标准为依据。nn书上的C语言,多数讲的是1989年的标准C语言,也被称为ANSI C。这个版本的C语言标准虽然古老,但是应用最广。在这个标准中,数组的长度必须是编译时可以确定的常数,不能是变量。n后来出了新的C语言标准,比如1999年的,称为C99。这个标准中,可以允许数组的长度由变量决定。这个特性被称为VLA,意思是“可变长度的数组”,英文可能是variable length array之类,记得不太清楚。nn实际上GCC、ICC等编译器可以支持VLA,但微软的VC就不支持,这个需要根据实际情况来考虑了。如果要让代码便于移植,目前最好还是用C89标准,因为几乎所有的C语言编译器都支持它。
Re: Wang6279026昨天 12:47
回复eastcowboyn恩,谢谢指导,真心谢谢。呵呵
3楼xuchao1229昨天 12:27
还有一点,呵呵nrow是行,col是列(column)n下次不要弄反了O(∩_∩)O~
Re: Wang6279026昨天 12:28
回复xuchao1229n我错了。。。哈哈哈,英语不好。。。
Re: xuchao1229昨天 12:41
回复Wang6279026n呵呵,c中定义变量无所谓,你知道含义就行n这要是sql中修改一个列名什么的,那意思可就差到十万八千里去了,呵呵
Re: Wang6279026昨天 12:42
回复xuchao1229是呀是呀
2楼AB_BA昨天 12:13
这个问题是由于标准不同导致的,标准c是不允许这样声明数组的,但是gcc标准是允许的,所以其实这两种都是正确的。
Re: Wang6279026昨天 12:14
回复AB_BAn恩,谢谢,原来是这样哈。但是书上既然是linux C编程,那么他应该在linux环境下运行才对呀。
1楼lxgwm2008昨天 10:57
这是C语言的标准不同导致的。C89不允许这种变长数组,而C99中则可以。如果编译时设定使用C89标准,如:ngcc demo4_7.c -o demo4_7 -std=c89n则编译不通过!
Re: Wang6279026昨天 11:00
回复lxgwm2008n奥,原来如此,受教了。谢谢指导。。。

读书人网 >编程

热点推荐