ANSI C的标准
驀然回首C語言系列——ANSI C的標準
前面的話
現在的大學牲入校時,竟然都是用的VC6.0 這么復古的 IDE ,1989年的標準,細數到現在已經有大概30年了
學習,當然要學習新的東西,要是現在還是學那些上世紀 的舊東西,怎么能體現當代革新的精神呢?
所以在這個博文里,給大家介紹一下 什么是ANSI C ,及VC6.0 的C89與C99的區別,然后向更新的C11進發
什么是ANSI C
萬物都有它的標準,C語言也不例外,C的常見標準有linux c、GNU C、C51、etc,ANSI C只是其諸多標準中的一個,百科簡介如下:
1983 年, 美國國家標準協會(ANSI)委任一個委員會 X3J11 對 C 語言 進行標準化。 經過長期艱苦的過程, 該委員會的工作于 1989 年 12 月 14 日正式被批準為ANSI X3.159-1989 并于 1990 年春天頒布。
當然,這個標準是用的最多最廣的,它致力于C語言的標準化。
C89與C99
(當然,他們的差別太多太多,我只是粗略的講講,簡單的,易見的)
main
想必大家成為大學牲,第一個C就是hello world
main () { printf ("hello world!"); }這個程序在Vc6.0(C89 )下很簡單的通過了編譯
然而在C99的標準下,沒有通過編譯
(讓我想到了,剛剛學C時的無敵的Bug..哈哈)
原因就是標準不同
在最新的 C99 標準中,只有以下兩種定義方式是正確的:
int指明了main()函數的返回值類型,函數名后面的圓括號一般包含傳遞給函數的信息。void表示沒有給函數傳遞參數。
所以在我們自己的hello world中,將會發現程序常常以。
main() 這種形式開始。C89標準允許這種形式,但是C99標準不允許。因此即使你當前的編譯器允許,也不要這么寫。
你還可能看到過另一種形式。
void main() 有些編譯器允許這種形式,但是還沒有任何標準考慮接受它。
void main( ) 的定義從來就不存在于 C++ 或者 C . —-C++ 之父 Bjarne Stroustrup
所以,編譯器不必接受這種形式,并且很多編譯器也不允許這么寫。
我們堅持使用標準的意義在于:當你把程序從一個編譯器移到另一個編譯器時,照樣能正常運行。
變量的定義
“C語言的變量定義只能放在最前面!”學長對懵逼的我大喊道…..
心中暗想到,用的時候再定義,不是更明了簡介??
哈哈,事實就是這樣,這個能否又是涉及到了C標準的問題,看例子:
code:
code:
for (int i=0;i<9;i++) //這樣的話是不是顯得得體簡介?需要的時候再定義! printf("%d",i);所以在C99中,引入了這樣的使用,實屬不錯!
當然,C89中是不能通過的
另外,這些變量的作用范圍只有for語句中,用后這些變量將會被回收方便省力~
當然,C89和C99的差別遠不止如此,我只是提出了最常見的,新手沒最容易遇到的兩點
結語
學習是點滴積累的過程,一點點的積累,后來收獲總是會有的1
總結
- 上一篇: The new Era
- 下一篇: C中的危险函数(缓冲区溢出)