Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

G++ 中 Array 的宣告

0 views
Skip to first unread message

Jiun-Yao Huang

unread,
Aug 5, 1998, 3:00:00 AM8/5/98
to
最近發現 GNU C++ 的一個現象,
如下定義的 function:

void func(int i)
{
char c[i];
// ...
}

用 g++ (2.8.0) compile 竟然會過,run 也沒有問題,利用 VC compile
則有 expected constant expression 的錯誤發生。

不過根據 C++ 的標準,array bound 必須是 constant expression 的。
我知道 GNU C/C++ 還有許多不是 standard 規定的「特異功能」,雖然有時
這些功能會很方便,不過終究不是標準,會降低程式 portability,不知
各位覺得如何?

--
Jiun-Yao Huang <mailto:jyh...@csie.nctu.edu.tw> Uni\/\/indows
Dep. of Comp. Sci. & Info. Eng., NCTU, Hsin-Chu, Taiwan, R.O.C. WW\/\/etworks
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SIGIDLE: Idle too long (core dumped)

小明

unread,
Aug 5, 1998, 3:00:00 AM8/5/98
to
《 在 jyh...@csie.nctu.edu.tw (Jiun-Yao Huang) 的大作中提到: 》
: 我知道 GNU C/C++ 還有許多不是 standard 規定的「特異功能」,雖然有時

: 這些功能會很方便,不過終究不是標準,會降低程式 portability,不知
: 各位覺得如何?

不是標準的功能,覺得需要 protability 就不要用呀...

那是自己要處理的事情,怎麼怪到別人身上呢?

通常遇到這種情形,都會加上 #ifdef 來處理,這是很常見的做法。

[m [1;34m※ 來源:‧蛋捲廣場 bbs.tku.edu.tw‧[FROM: 163.13.93.101] [m

Jiun-Yao Huang

unread,
Aug 5, 1998, 3:00:00 AM8/5/98
to
:-> 不是標準的功能,覺得需要 protability 就不要用呀...
:-> 那是自己要處理的事情,怎麼怪到別人身上呢?
:-> 通常遇到這種情形,都會加上 #ifdef 來處理,這是很常見的做法。

利用 #ifdef 的方式我知道,我也常用...:-)
可是並不是每一個人都是熟讀 C++ 的 spec 後才開始 programming 的。
我覺得 compiler 應該用 compiler option 的方式來讓 programmer 明白地
指示 compiler 應該具有哪些特殊的功能,而 default 的狀況則是盡可能地
符合標準。

--
Jiun-Yao Huang <mailto:jyh...@csie.nctu.edu.tw> Uni\/\/indows
Dep. of Comp. Sci. & Info. Eng., NCTU, Hsin-Chu, Taiwan, R.O.C. WW\/\/etworks
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

達文西的精確 米開朗基羅的氣勢 拉菲爾的純厚 梵谷的熱情 畢卡索的奇巧 達利的狂放
In My Dreams...


小明

unread,
Aug 5, 1998, 3:00:00 AM8/5/98
to
《 在 jyh...@csie.nctu.edu.tw (Jiun-Yao Huang) 的大作中提到: 》
: 利用 #ifdef 的方式我知道,我也常用...:-)

: 可是並不是每一個人都是熟讀 C++ 的 spec 後才開始 programming 的。
: 我覺得 compiler 應該用 compiler option 的方式來讓 programmer 明白地
: 指示 compiler 應該具有哪些特殊的功能,而 default 的狀況則是盡可能地
: 符合標準。

這倒沒錯。

唉,最不守規定的,第一就是 Borland (改名為 Inprise 真難聽),
第二則是 Microsoft。大家也許覺得標準很重要,但是多數的廠商並
不這麼認為,這兩家公司早期更是壓根不曉得標準是什麼,因為他們
覺得自己就是標準。另外不妨看一下 PC Magazine 是怎麼評鑑各個
編譯程式的,他們反而覺得有許多 "feature" 是很重要的事。

話說回來,有幾個知道在 for 裡的變數定義不能用在迴圈外面呢?
那些標準也是改來改去的,令人搞不清楚。本來還花了一些時間去注
意 X3J16 的東西,看到 STL, RTTI, string 之後我就再也不理他們
了,覺得頗為白爛,那時許多人去問 Stroustrup ,他也只說一些官
式辭令...

反正乖乖寫程式比較重要,自己後來還不是有事沒事弄個 VM 搞自己
的程式語言來做案子。也就不那麼在意了。

如果我記得沒錯的話,有一些 parser 可以幫忙檢查語法的問題,不
過多半也不夠好。另外,自己曾經寫過一個小 tool 來跑 Visual C++,
Watcom C++, Borland C++ 和 DJGPP 來測試語法問題,後來就丟掉了,
因為只用 Visual C++ 。手上如果有多種編譯程式的話,不妨照樣自
己做個工具來做輔助,不嫌難看的話,用 dos batch 就可以了。

另外,我的感覺是 Watcom 和 Symantec 最乖,有這兩者之一作準就
差不多了。

[m [1;36m※ 來源:‧蛋捲廣場 bbs.tku.edu.tw‧[FROM: 163.13.93.101] [m

0 new messages