variable-length array
常看到許多人不自覺地使用 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
06/07 00:40, 1F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章