[C 隨手記]_遇到太老實的IDE,預設不支援for迴圈內直接宣告變數的問題解決辦法(c99 problem)

遇到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也大同小異)

2013-12-11 下午 10-39-24

 

2. 分別在Debug跟Release中的"其他選項"手動加入-std=c99,這樣確定好你就把編譯選項改為使用1999年的標準ISO C,也就直接解決你上述的問題了!

2013-12-11 下午 10-39-41

 

至於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