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