遇到C99 MODE Problem?,簡單幾個步驟加入編譯選項就可以解決摟!
這也是繼上一篇來,屬於C語言演進所產生的問題之一
我們現在都很習慣寫for迴圈時,寫成:
1: for (int i = 0; i < length; i++)
2: {
3: //--code
4: }
那其實在古早純ISO C於1989年的標準C語法是不允許以上的寫法
而必須要預先定義:
1: int i ;
2: for (i = 0; i < length; i++)
3: {
4: //-code
5: }
而直到1999年ISO C才開始採納第一種我們現在常見的寫法,
那麼...有時候總是用新的寫法習慣了,而寫出來的原始碼也是如此
但碰到有些IDE在編譯時會針對這個問題提出錯誤或者警告
會顯示Error: 'for' loop initial declaration used outside c99 mode
也就是c99 error,尤其是採用gcc的IDE,預設的編譯參數大多都沒有採用新的ISO C
幸好這是可以透過後來的編譯外加參數去解決,改變成採用1999年的ISO C。
以下示範CodeBlock:
1. 已經匯入好專案,遇到c99,則到上方的專案->建置選項(其他IDE也大同小異)
2. 分別在Debug跟Release中的"其他選項"手動加入-std=c99,這樣確定好你就把編譯選項改為使用1999年的標準ISO C,也就直接解決你上述的問題了!
至於Visual Studio呢?...
想當然耳總是用上最新技術的IDE,自然沒這個問題好困擾…
這就是所謂由奢入儉難吧(拖走)
針對C99跟其他C89,90的解釋,其實都說是1999年了,不免直接聯想到是1999的"99"
不過還是再引用http://codingnote.blogspot.tw/2006/07/c89-c90-c99.html所提到的
Q: 有時會看到人家提到 C89, C90, C99, C++98, 或 C++03, 那是啥?
A: 是俗稱 C 或 C++ 的標準的版本,數字指的是年代。
C89 是 ANSI(美國國家標準局)定的,通過於 1989 年底,出版於 1990 年春,正式編號是 ANS X3.159-1989。C89也就是所謂的 ANSI C。
C90 是 ISO(國際標準組織)承襲自 ANSI 的 C89 而定的國際標準,美國也跟著採用了。C90 的核心內容和 C89 一樣。C90 的正式編號是ISO/IEC 9899:1990。
C99 是 ISO 在經過十年後正式推出的 C 標準的第二版(其間有持續的對 C進行小幅的修訂),正式編號是 ISO/IEC 9899:1999。C99 新增了一些連 C++也沒有的新特性(features),像是變動長度的陣列。目前大家討論 C 仍是以C89/C90 為主,充份支援 C99 的編譯器並不多。
C++98 是 C++ 正式標準的第一版,正式編號是 ISO/IEC 14882-1998。正式標準推出後,陸續有各界人士提出 Defect Report(缺陷報告,簡稱 DR),標準委員會受理了這些 DR, 並經過既定的研討程序後,便有可能決定對標準進行小幅度的訂正。累積了相當數量後,便會出版 Technical Corrigendum(技術勘誤,簡稱TC)。
所謂 C++03 便是 ISO 在 2003 年所公佈對於 C++ 標準的第一版TC(簡稱TC1),
C++0x 是預計的 C++ 標準的第二版,計畫將於 2009 年公佈。
thx for:
http://bytes.com/topic/c/answers/558523-error-loop-initial-declaration-used-outside-c99-mode
http://www.cs.northwestern.edu/academics/courses/110/html/codeblocks-faq.html#c99