VC6.0编译器不符合标准的一些情况(解决一些编译错误)
2013-05-03 18:15
246 查看
都什么时代了,老谭的书还用VC6.0, 编译器那么老(好像是c89之前了,比较新的是c99标准)对标准支持不好,真是阻碍中国计算机教育的进步。
最近几个编译器来回换,蓝桥杯好像只给vc6.0,发现还是g++的编译器比较好,编译出的代码执行速度更快一点,对标准支持的最好。
看这一段很简单的代码:
用g++完全没问题,没有任何waring或者error,但是用vc6.0的话就会一堆错误:
t.cpp(8) : error C2057: expected constant expression
t.cpp(8) : error C2466: cannot allocate an array of constant size 0
t.cpp(8) : error C2133: 'a' : unknown size
t.cpp(9) : error C2057: expected constant expression
t.cpp(9) : error C2466: cannot allocate an array of constant size 0
t.cpp(9) : error C2133: 'b' : unknown size
t.cpp(12) : error C2374: 'i' : redefinition; multiple initialization
t.cpp(10) : see declaration of 'i'
纠结了一阵终于明白了,首先vc6.0中(即使较新的vc++2010)也不允许定义变长数组,但是c99标准已经支持变长数组,所以可以用a
直接创建变长数组,下标可以是变量。
c99规定,变长数组必须是自动存储类。(变长数组中的”变"意思是说其维数可以用变量指定,而不是说创建数组后可以修改其大小)
另外一点就是vc6.0中在for语句中创建的变量 i 的作用域问题,
c99规定for语句中的 i 只在该for 语句中有效,但是vc6.0中for语句中的 i 却是在后面所有作用域都有效,所以就出现了重复定义问题。
知道了原因,修改编译错误就是小菜了。当然还有其他一些不合标准的地方,反正不用这玩意了。还是建议用最新的编译器,逐渐淘汰不符合标准的。
最近几个编译器来回换,蓝桥杯好像只给vc6.0,发现还是g++的编译器比较好,编译出的代码执行速度更快一点,对标准支持的最好。
看这一段很简单的代码:
#include <iostream> #include <cstdio> using namespace std; int main() { int n; cin >> n; int a ; int b ; for (int i = 0; i < n; ++i) cin >> a[i]; for (int i = 0; i < n; ++i) cin >> b[i]; return 0; }
用g++完全没问题,没有任何waring或者error,但是用vc6.0的话就会一堆错误:
t.cpp(8) : error C2057: expected constant expression
t.cpp(8) : error C2466: cannot allocate an array of constant size 0
t.cpp(8) : error C2133: 'a' : unknown size
t.cpp(9) : error C2057: expected constant expression
t.cpp(9) : error C2466: cannot allocate an array of constant size 0
t.cpp(9) : error C2133: 'b' : unknown size
t.cpp(12) : error C2374: 'i' : redefinition; multiple initialization
t.cpp(10) : see declaration of 'i'
纠结了一阵终于明白了,首先vc6.0中(即使较新的vc++2010)也不允许定义变长数组,但是c99标准已经支持变长数组,所以可以用a
直接创建变长数组,下标可以是变量。
c99规定,变长数组必须是自动存储类。(变长数组中的”变"意思是说其维数可以用变量指定,而不是说创建数组后可以修改其大小)
另外一点就是vc6.0中在for语句中创建的变量 i 的作用域问题,
c99规定for语句中的 i 只在该for 语句中有效,但是vc6.0中for语句中的 i 却是在后面所有作用域都有效,所以就出现了重复定义问题。
知道了原因,修改编译错误就是小菜了。当然还有其他一些不合标准的地方,反正不用这玩意了。还是建议用最新的编译器,逐渐淘汰不符合标准的。
相关文章推荐
- VC6.0编译器不符合标准的一些情况(解决一些编译错误)
- php源码编译安装时的一些常见错误解决办法
- VC中常见的一些编译链接错误的解决
- linux(centos5.5)下编译php时的一些典型错误及解决办法。
- redhat编译安装postfix-3.1.1出现的一些错误及解决方法
- netdiuno MF4.3编译错误情况解决
- C#编译时出现“不安全代码只会在使用 /unsafe 编译的情况下出现”错误的解决
- CentOS下编译php时的一些典型错误及解决办法.
- qt交叉编译arm时出现的一些错误和解决方法
- 内核编译错误的一些解决办法
- CentOS下编译php时的一些典型错误及解决办法
- ubuntu12.04的64位系统编译android4.0的一些错误的解决方法
- linux(centos5.5)下编译php时的一些典型错误及解决办法。
- 关于编译ffmpeg的output-example.c和api-example.c 错误的一些解决方法
- C++编译时引起Lnk2005错误的几种情况与解决办法
- 编译php时的一些典型错误及解决办法.
- 嵌入式开发六:busybox编译根文件系统的一些错误解决办法
- 立宇泰标准5.0BSP编译错误以及解决办法
- cocos2d-x编译时的一些错误解决,编译出错,运行错误
- 内核编译错误的一些解决办法