Re: [問題] 用變數宣告陣列

看板C_and_CPP作者 (CA)時間16年前 (2009/11/29 01:01), 編輯推噓4(4012)
留言16則, 7人參與, 最新討論串3/5 (看更多)
剛剛試了一下 gcc 的 VLA: int i = -1; int vla[i]; printf( "%d\n", sizeof( vla ) ); // -4 我想我不會特別去用 VLA 這種東西吧。 -- 自High筆記(半荒廢) http://legnaleurc.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.205.248.119

11/29 01:12, , 1F
哈哈哈~~這個好笑....XD
11/29 01:12, 1F

11/29 01:17, , 2F
這太扯了吧 XDDD
11/29 01:17, 2F

11/29 01:18, , 3F
這樣所有用 sizeof(arr)/sizeof(int) 的程式碼都爆了...
11/29 01:18, 3F

11/29 01:28, , 4F
有個問題... 如果i是使用者輸入的話.. 應該就...
11/29 01:28, 4F

11/29 01:29, , 5F
所以這樣對一個VLA而言,本來就有問題吧?
11/29 01:29, 5F

11/29 01:29, , 6F
這樣的作法( sizeof(arr) )
11/29 01:29, 6F

11/29 01:33, , 7F
其實我真正驚訝的地方是,sizeof 應該是在編譯期完成
11/29 01:33, 7F

11/29 01:34, , 8F
評算,但是它竟然會跟著變動,而程式也沒當掉
11/29 01:34, 8F

11/29 01:35, , 9F
也許只是我運氣好吧,不過我還是認為 VLA 很雞肋
11/29 01:35, 9F

11/29 01:38, , 10F
既然有支援VLA,那sizeof就是有跟著修改啊...
11/29 01:38, 10F

11/29 01:38, , 11F
戳到我的點了XDDD
11/29 01:38, 11F

11/29 01:39, , 12F
c99規定sizeof VLA要在執行期計算...
11/29 01:39, 12F

11/29 01:45, , 13F
而且你測一個undefined hehavior測出奇怪的結果哪裡不對了
11/29 01:45, 13F

11/29 01:58, , 14F
原來有改 ... 我原本預期它會丢一個指標長度
11/29 01:58, 14F

11/29 02:02, , 15F
也沒有說不對啦,只是覺得有趣而己
11/29 02:02, 15F

11/29 13:12, , 16F
原來VLA的sizeof會在執行期算!!
11/29 13:12, 16F
文章代碼(AID): #1B4LTCuJ (C_and_CPP)
文章代碼(AID): #1B4LTCuJ (C_and_CPP)