“变长”数组问题

来源:互联网 发布:在线p图软件 编辑:程序博客网 时间:2024/05/17 05:17

1. 变长数组

在Windows下用VS2008编译如下程序:

int main(int argc, char ** argv){   int length = 10;  int a[length];  return 0;}

出现了如下错误:

error  C2057: 应输入常量表达式

error C2466: 不能分配常量大小为 0 的数组

error C2133: “a”: 未知的大小

原因是C89规定数组定义时长度必须是常量C99中,局部数组是可以使用变量作为其长度的但是VS2008编译器并不支持C99,所以编译会出错。

该程序在Linux下编译能通过,是因为Linux用GCC编译,而GCC支持C99。

C89 和 C99: C89是标准C(ANSI C), C99是在C89的基础上发展起来的,增加了基本数据类型,关键字和一些系统函数等。我们用的C是C89标准的,C++是C89编写的,目前支持C99比较好的是GCC,ICC次之,VC系列,包括VC2010都完全不支持C99。

GCC: (GNU Compiler Collection,GNU编译器集合)是一套由GNU工程开发的支持多种编程语言的编译器,是类Unix操作系统的标准编译器。

ICC (Intel C++ Compiler) : 美国 Intel 公司开发的 C/C++ 编译器,适用于 Linux、Microsoft Windows 和 Mac OS X 操作系统。


2. const 定义常量

const int LENGTH = 10;int a[LENGTH];

上述程序在 C++编译环境下编译是能通过的,但在C语言环境下编写这段程序,编译是通不过的。因为在标准C++中,const 定义的是一个常量,而在ANSI C中,这样定义的是一个只读变量,常量应该用#define宏定义,宏定义是预编译的,在预编译阶段,LENGTH都被替换为10了。

                                             
0 0
原创粉丝点击