鍍金池/ 問答/C  C++  網(wǎng)絡(luò)安全/ C++11和C創(chuàng)建數(shù)組時,使用變量來確定數(shù)組維度為什么沒報錯??

C++11和C創(chuàng)建數(shù)組時,使用變量來確定數(shù)組維度為什么沒報錯??

給數(shù)組創(chuàng)建大小時,可以采用變量來確定數(shù)組的維度大小嗎?
系統(tǒng)使用window10和Ubuntu16.04。
編譯器版本。

  • 在window10采用g++ 5.4.0和gcc 5.1.0

  • 在Ubuntu采用g++ 5.4.0,clang 3.8.0 和gcc 5.1.0

代碼如下

c++

#include <iostream>
int main(){
    int size = 5;
    int test[size];
    test[0] = 0;
    cout << test[0] << endl;
    return 0;
}

C

#include <stdio.h>
int main(){
    int size = 5;
    int test[size];
    test[0] = 0;
    printf("%d", test[0]);
    return 0;
}

均可以編譯通過,沒有任何問題??為什么丫??

回答
編輯回答
有你在

@felix 我把來自于felix的評論分享一下吧。跟上面的幾個大神說的都是一樣的,但是他貼了個官方的文檔,所以可能會更清晰完美一些。還是謝謝上面的幾個大神的幫助。下面是答案。
參見于gcc官方文檔 可以知道,這是一個C99的特性,可以使用變量名來定義數(shù)組長度,但是對于C++而言是一個可選特性。
另外,在陳浩的酷客發(fā)現(xiàn)了這么一篇文章,對于理解數(shù)組亂七八糟的東西還是挺有幫助的。謝謝各位。

2018年5月19日 05:20
編輯回答
亮瞎她

你的int變量其實是可以在編譯的時刻確定的,在gcc5.4里輸入的變量也可用來指定數(shù)組大小,大概是編譯器進(jìn)化了。以下代碼變異和運行都沒有問題。

#include <stdio.h>
int main(){
  int n;
  scanf("%d",&n);
  int test[n];
  printf("%d", test[n-1])
  return 0;
}
2018年2月6日 01:08
編輯回答
晚風(fēng)眠

我記得C Primer Plus E6講過這個問題,是第十章?反正C這么寫叫VLA變長數(shù)組,當(dāng)然這個特性在C99是一定要支持,C11改為了可選。
C++是不能這么寫的,這里給過,是GCC擴(kuò)展支持(不過我查了下C++ Primer Plus E6。。。可以有其他方法繞過這個限制耶。。。不過我不會)
(最后感謝評論中那位大佬對我錯誤觀點的更正)

2017年9月10日 05:47
編輯回答
不歸路

編譯器擴(kuò)展,其他編譯器不保證可以

2017年6月30日 22:44
編輯回答
溫衫

這個特性是gcc的擴(kuò)展,是C99的必須特性,C11的可選特性,另外C++標(biāo)準(zhǔn)不支持VLA

2017年11月18日 12:51
編輯回答
枕邊人

這是 C99 標(biāo)準(zhǔn)的一部分,叫做 變長數(shù)組變量長度數(shù)組

2017年6月5日 22:31