Re: [問題] main 前執行之函式?(已解決)
看板C_and_CPP (C/C++)作者Favonia (小西風最乖了*^^*)時間14年前 (2011/09/03 19:21)推噓3(3推 0噓 1→)留言4則, 4人參與討論串2/3 (看更多)
※ 引述《tropical72 (藍影)》之銘言:
: 一開始一直試都不成功,原因在於 Visual C++ .c 不支援 C99,
: 改 .cpp 之後就過了,一開始查 msdn ,查到這份網頁
: http://msdn.microsoft.com/en-us/library/bb918180.aspx
: 看完第一個 global variable initialize 後,裡面說明提到
: According to the C/C++ standard, func() must be called before main() is
: executed. But who calls it?
: ( M$ 真是自打嘴巴,明明說標準可以這麼做,偏偏 .c 連這點都不支援)
: 這部份可能查 C99 會有更多的說明, 但 M$ 這份我覺得寫得還不錯。
(其他恕刪)因為要講的東西好像還不少,回一篇文章好了。
(1) 首先 MSVC++ 不算做錯,因為 C99 (N1256) 禁止這語法而且編譯
器有責任發出錯誤訊息。標準說
| All the expressions in an initializer for an object that has static
| storage duration shall be constant expressions or string literals.
@ C99 (N1256) 6.7.8p4
俗稱的全域變數符合這條,所以本來就不能呼叫函數。MSDN 寫
C/C++ 可能只是偷懶而已 xD
補:編譯器要允許更多形式的初始化方法是他的自由 xD
(2) C++ 允許更多初始化這些變數的方法,也有稍微複雜的初始化順序
規則。變得比較「方便」的代價就是比較容易寫出錯誤的程式碼。
我記得 Google 的 C++ 寫作風格有針對 static 做嚴格規定 xD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.39
→
09/03 22:02, , 1F
09/03 22:02, 1F
推
09/04 00:49, , 2F
09/04 00:49, 2F
推
09/04 10:00, , 3F
09/04 10:00, 3F
推
09/04 10:24, , 4F
09/04 10:24, 4F
※ 編輯: Favonia 來自: 140.112.30.39 (09/05 00:48)
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章