[問題] c++ primer array初始的問題

看板C_and_CPP作者 ( )時間14年前 (2011/11/03 15:44), 編輯推噓7(7019)
留言26則, 10人參與, 最新討論串1/1
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)

11/03 15:46, , 1F
double salaries[staff_size]<--編譯器讓你ok
11/03 15:46, 1F

11/03 15:47, , 2F
實際上標準規範不能這樣使用.
11/03 15:47, 2F

11/03 15:47, , 3F
說錯了c99以前的規範不准這樣用
11/03 15:47, 3F
難怪我記得我以前學的時候好像不行這樣搞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)

11/03 15:50, , 4F
建議少這麼做,有一些原因判斷 VLA 是放在 stack, 而非
11/03 15:50, 4F

11/03 15:51, , 5F
heap,且吃的 stack 比實際需求還大一些。
11/03 15:51, 5F

11/03 15:52, , 6F
VLA是?
11/03 15:52, 6F

11/03 15:53, , 7F
打開warning就會看到compiler跟你抱怨了..
11/03 15:53, 7F
但我剛compile g++ test.cpp -W 非常安靜耶 沒有warning XDD

11/03 15:53, , 8F
VLA, variable-length array,可變長度陣列.
11/03 15:53, 8F
※ 編輯: k0783154 來自: 140.112.4.181 (11/03 15:56)

11/03 15:56, , 10F
裡面提到 gnu-c compiler 把 vla 放在 stack (看實作)
11/03 15:56, 10F

11/03 16:05, , 11F
是-Wall, -W根本沒有功能吧...
11/03 16:05, 11F

11/03 16:07, , 12F
實際上打-Wall -Wextra.還是不會跟你抱怨.因為最近的gcc
11/03 16:07, 12F

11/03 16:08, , 13F
會支援c99.而c99接受VLA. 不過一些舊版的編譯器會給你
11/03 16:08, 13F

11/03 16:09, , 14F
error.
11/03 16:09, 14F

11/03 16:10, , 15F
嗯 上面搞錯 要-pedantic
11/03 16:10, 15F

11/03 16:20, , 16F
-w Inhibit all warning messages<--不可以用這個
11/03 16:20, 16F

11/03 16:38, , 17F
pedantic 好像是最嚴格
11/03 16:38, 17F

11/03 16:43, , 18F
-Wall -Wextra -pedantic -Werror<--嚴到你想打編譯器
11/03 16:43, 18F

11/03 17:27, , 19F
-Werror 很可怕....有 warning 就跟你哭爸不上你過XD
11/03 17:27, 19F

11/03 17:27, , 20F
11/03 17:27, 20F

11/03 17:30, , 21F
重點是加了-pedantic.一堆警告讓你不知道為何
11/03 17:30, 21F

11/03 17:36, , 22F
-pedantic 總是抓了一堆非常嚴的警告www
11/03 17:36, 22F

11/03 18:37, , 23F
放在global不行吧
11/03 18:37, 23F

11/03 19:32, , 24F
你一定是用gcc,拿去visual c++就會爆了
11/03 19:32, 24F

11/03 21:27, , 25F
我都四種全開,因為看到有warnning就不舒服...
11/03 21:27, 25F

11/04 15:36, , 26F
g++有自己實作支援C99的VLA 但是C++標準並沒有這項
11/04 15:36, 26F
文章代碼(AID): #1EiaPQhB (C_and_CPP)