看板 C_and_CPP 關於我們 聯絡資訊
c++ primer 4/e p.111 上面這樣寫 int staff_size = 27; double salaries[staff_size]; // Error: nonconst variable 然後我就試了一下 int main() { int x = 5; double aaa[x]; return 0; } 發現compile是可以過的@@ 但我也是印象中應該是不行的 (primer也是如此寫) 如果要宣告在stack調出空間的array 必須要在compile time 就要決定 不知道我哪裡理解有誤 謝謝:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.4.181 ※ 編輯: k0783154 來自: 140.112.4.181 (11/03 15:44)
angleevil:double salaries[staff_size]<--編譯器讓你ok 11/03 15:46
angleevil:實際上標準規範不能這樣使用. 11/03 15:47
angleevil:說錯了c99以前的規範不准這樣用 11/03 15:47
難怪我記得我以前學的時候好像不行這樣搞XD 4 int main() 5 { 6 int x; 7 8 cin >> x; 9 10 double aaa[x]; 11 12 for ( int i = 0; i < x; ++i ) 13 { 14 aaa[i] = (double)i; 15 cout << aaa[i] << endl; 16 } 17 } 我剛又測試一下這個code 也是可以跑沒問題 所以現在是run-time決定也都沒問題就是了? ※ 編輯: k0783154 來自: 140.112.4.181 (11/03 15:49)
tropical72:建議少這麼做,有一些原因判斷 VLA 是放在 stack, 而非 11/03 15:50
tropical72:heap,且吃的 stack 比實際需求還大一些。 11/03 15:51
k0783154:VLA是? 11/03 15:52
Fenikso:打開warning就會看到compiler跟你抱怨了.. 11/03 15:53
但我剛compile g++ test.cpp -W 非常安靜耶 沒有warning XDD
tropical72:VLA, variable-length array,可變長度陣列. 11/03 15:53
※ 編輯: k0783154 來自: 140.112.4.181 (11/03 15:56)
tropical72:裡面提到 gnu-c compiler 把 vla 放在 stack (看實作) 11/03 15:56
Fenikso:是-Wall, -W根本沒有功能吧... 11/03 16:05
angleevil:實際上打-Wall -Wextra.還是不會跟你抱怨.因為最近的gcc 11/03 16:07
angleevil:會支援c99.而c99接受VLA. 不過一些舊版的編譯器會給你 11/03 16:08
angleevil:error. 11/03 16:09
Fenikso:嗯 上面搞錯 要-pedantic 11/03 16:10
angleevil:-w Inhibit all warning messages<--不可以用這個 11/03 16:20
purpose:pedantic 好像是最嚴格 11/03 16:38
angleevil:-Wall -Wextra -pedantic -Werror<--嚴到你想打編譯器 11/03 16:43
xatier:-Werror 很可怕....有 warning 就跟你哭爸不上你過XD 11/03 17:27
xatier: 讓 11/03 17:27
angleevil:重點是加了-pedantic.一堆警告讓你不知道為何 11/03 17:30
xatier:-pedantic 總是抓了一堆非常嚴的警告www 11/03 17:36
amozartea:放在global不行吧 11/03 18:37
chchwy:你一定是用gcc,拿去visual c++就會爆了 11/03 19:32
diabloevagto:我都四種全開,因為看到有warnning就不舒服... 11/03 21:27
hilorrk:g++有自己實作支援C99的VLA 但是C++標準並沒有這項 11/04 15:36