variable-length array

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間18年前 (2006/06/06 23:57), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
常看到許多人不自覺地使用 VLA (以前我也是),像這樣: void foo(int n) { int array[n]; ... } 以往的 C90 標準是不允許這種宣告的,陣列的大小必需為已知常數。 但因為 gcc 有對 C 語言擴充,所以用 gcc 編譯是沒有問題的。 雖然如此,以前老手看到這樣的 code 總會念上幾句: 「不要依賴 compiler extension!」 現在的 C99 標準的確有 VLA 了,所以就算寫上面的 code 也是合法 的。甚至 C99 還有如下的語法: void bar(int size, int array[size]) { ... } 但我想提醒大家的是:C99 可以這樣寫沒錯,但 C++ 可沒有這個標準, 也就是說上面的 code 並不是合法的 C++ 程式。為了讓大家的程式在 不同平台及不同 compiler 下都儘可能快樂地跑,不得不說句話: 「弄清楚你在寫 C99 還是 C++98!」 如果你想寫標準的 C++,請用 std::vector 代替 VLA: #include <vector> void foo(int n) { std::vector<int> array(n); ... } void bar(std::vector<int>& array) { ... } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.3.35

06/07 00:40, , 1F
對呀這篇說的好 很多人不知道int i[n]這樣寫是不合標準~
06/07 00:40, 1F
文章代碼(AID): #14XQNUYz (C_and_CPP)
文章代碼(AID): #14XQNUYz (C_and_CPP)