C语言变长数组

http://www.cnblogs.com/pangyujie/archive/2011/09/28/2194730.html

C语言变长数组

变长数组是C99标准里面的内容,支持C99标准的编译器都能正确的编译含变长数组的C程序。以前一直用VC,只能使用定长数组。当时也用过指针来模拟变长数组,但是比较麻烦,且使用指针的话是在堆中开辟内存空间,效率上会有影响。

测试代码

 1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 int main(int argc, char *argv[])
6 {
7 const char *head = "headstr-";
8 const char *tail = "tailstr";
9 char vla[strlen(head) + strlen(tail) + 1];
10 strcpy(vla, head);
11 strcat(vla, tail);
12 printf("%s\n", vla);
13
14 int i;
15 for(i = 0; i < 5; ++i)
16 {
17 char foo[i + 2];
18 strncpy(foo, "xxxxxxxxxxx", i + 1);
19 foo[i + 1] = '\0';
20 printf("%s\n", foo);
21 }
22
23 return 0;
24 }

 

使用GCC(Windows下MinGW32环境)可正常编译:

 

使用VC的编译器cl.exe,报错(VS2008下同样报错):



分类:  C
标签:  变长数组
0
0
(请您对文章做出评价)
» 博主后一篇: CSS实现图片按比例缩放

posted on 2011-09-28 18:58 Pang Yujie 阅读(185) 评论(8) 编辑 收藏

评论

#1楼 2011-09-28 20:21 garbageMan      

 

引用int i;
for(i = 0; i < 5; ++i)
既然是C99
写成
for(int i = 0; i < 5; ++i ) 
岂不更好   回复 引用 查看   

 

#2楼[楼主2011-09-28 20:26 Pang Yujie      

@garbageMan
呵呵,我当时只是不想加上-std=c99这个参数才这么写的。
不过说起来,变长数组这东西确实是到了C99才有的,for(int i = 0;......)也是C99才有的。我用GCC编译的时候没加-std=c99,还是能编译变长数组,但是不能编译for(int i = 0; .....)。这是怎么回事我就搞不懂了…… 
回复 引用 查看   

#3楼 2011-09-28 22:21 garbageMan      

@Pang Yujie
C99新内容的绝大部分都是在各个编译器中已经实现了的
只是实现程度不同
比如\\注释,VC6就有
C99有些东西来自GCC原有的一些扩展
  回复 引用 查看   

#4楼 2011-09-28 22:34 egmkang      

 

引用garbageMan:
@Pang Yujie
C99新内容的绝大部分都是在各个编译器中已经实现了的
只是实现程度不同
比如\\注释,VC6就有
C99有些东西来自GCC原有的一些扩展
好像除了VC不支持C99,其他编译器都支持了吧   回复 引用 查看   

 

#5楼[楼主2011-09-28 22:37 Pang Yujie      

@egmkang
应该说,现在的编译器基本上都支持了,只不过是支持程度的问题而已。
但是microsoft的编译器对C99的支持非常差。wikipedia上有个列表http://en.wikipedia.org/wiki/C99
  回复 引用 查看   

#6楼 2011-09-28 22:46 egmkang      

 

引用Pang Yujie:
@egmkang
应该说,现在的编译器基本上都支持了,只不过是支持程度的问题而已。
但是microsoft的编译器对C99的支持非常差。wikipedia上有个列表 http://en.wikipedia.org/wiki/C99
下面,自己看
Microsoft Visual Studio No As of Visual Studio 2010, there are no plans to support C99.[11][12]   回复 引用 查看   

 

#7楼[楼主2011-09-28 22:48 Pang Yujie      

@egmkang
所以说啊,人家MS就是牛气冲天,不把标准当回事。
  回复 引用 查看   

#8楼 2011-09-29 07:31 garbageMan      

 

引用egmkang:
引用garbageMan:
@Pang Yujie
C99新内容的绝大部分都是在各个编译器中已经实现了的
只是实现程度不同
比如\\注释,VC6就有
C99有些东西来自GCC原有的一些扩展
好像除了VC不支持C99,其他编译器都支持了吧
VC支持的确实很差
但单行注释// (前面写错了) 是C99的   回复 引用 查看  
posted on 2011-11-19 02:45  lexus 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lexus/archive/2011/11/19/2254811.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值