程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 編譯器優化問題,編譯器優化

編譯器優化問題,編譯器優化

編輯:關於C語言

編譯器優化問題,編譯器優化


    今天同學在群裡火急火燎的@我還以為有什麼事要發生呢,結果發了一段代碼出來,大概是這個意思:

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標准比較模糊的概念都有自己的解釋。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved