编译器优化问题

来源:转载

    今天同学在群里火急火燎的@我还以为有什么事要发生呢,结果发了一段代码出来,大概是这个意思:

1 #include <stdio.h>2 int main()3 {4 int n;5 scanf("%d", &n);6 int data[n];7 return 0;8 }

    第一反应是这代码是哪个傻逼新生写得呢!结果,他说这个代码GCC编译通过了,当然我也试了一下,VS不用编译就有红色的下划线了,Dev C++用GCC编译确实是通过了,等等,我想静静,那么问题来了,静静是谁?难道是GCC编译器有bug?上C语言课老师可是反复强调C/C++没有变长数组啊(除非new一个),可GCC编译器是经过这么多人测试全球都在使用的东西啊,这作何解释呢?

    结论是编译器智能了。它懂你的意思。就不要那么古板了,它为什么可以这么做呢?这样不是违反了C标准吗?要从C标准说的话就有话说啦,C标准规定了不能有变长数组,但是C标准为了程序运行效率没有做越界处理,是否越界全靠程序员决定,而这一点正好给了编译器发挥的余地,每一个进程开始运行的时候操作系统总会分一个栈给它,编译器便是利用这个栈来实现这个“变长数组”的,至于个中细节,还需推敲。

    几乎每一个编译器对这种C标准比较模糊的概念都有自己的解释。



分享给朋友:
您可能感兴趣的文章:
随机阅读: