为什么VC6编译出的东西跟VS2012运行结果完全不同
展开全部
首先,VC6是90年代的,VS2012是10年代的,这么多年了,VC++编译器的实现肯定已经改变了。出现运行结果不同的情况是很正常的,C和C++语言标准有许多未定义的行为,编译器实现改变,对这些未定义行为的预定也会存在改变。
其次,VC6对C++的标准支持度不是很高,而且C++98和C++11也有很大区别。举个例子,for (int i = 0;;);这句话,在VC6里面的i就存在“污染”,并非for内局部变量,而根据C++标准,这里的i是不能作用到for外面的。VS2012对C++标准的支持度提高许多,那么这种不规范的行为都会被矫正。那么VC6与VS2012的结果大相庭径也是可以理解的。
建议题主使用新版本的编译器来比较。比如使用gcc 4.8以上而不是VC++6.0,来与VS2012比较。这样才能验证代码的正确性。
顺便一提,VS2012也有许多不标准的地方,一般认为gcc是比较严格遵守标准的。
其次,VC6对C++的标准支持度不是很高,而且C++98和C++11也有很大区别。举个例子,for (int i = 0;;);这句话,在VC6里面的i就存在“污染”,并非for内局部变量,而根据C++标准,这里的i是不能作用到for外面的。VS2012对C++标准的支持度提高许多,那么这种不规范的行为都会被矫正。那么VC6与VS2012的结果大相庭径也是可以理解的。
建议题主使用新版本的编译器来比较。比如使用gcc 4.8以上而不是VC++6.0,来与VS2012比较。这样才能验证代码的正确性。
顺便一提,VS2012也有许多不标准的地方,一般认为gcc是比较严格遵守标准的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询