C 語言的標(biāo)準(zhǔn)
什么是標(biāo)準(zhǔn)?標(biāo)準(zhǔn)是對(duì)重復(fù)性事物和概念所做的統(tǒng)一規(guī)定,他以科學(xué)技術(shù)和實(shí)踐經(jīng)驗(yàn)的結(jié)合成果為基礎(chǔ),經(jīng)有關(guān)方面協(xié)商一致,由主管機(jī)構(gòu)批準(zhǔn),以特定形式發(fā)布作為共同遵守的準(zhǔn)則和依據(jù)。
在這個(gè)標(biāo)準(zhǔn)概念大行其道的今天,如果大家在生活中稍微注意一下,其實(shí)可以很容易發(fā)現(xiàn),我們生活在一個(gè)標(biāo)準(zhǔn)化的世界里,每個(gè)產(chǎn)品的外包裝或者標(biāo)簽上都會(huì)注明相應(yīng)的執(zhí)行標(biāo)準(zhǔn)。標(biāo)準(zhǔn)貫穿著我們的衣食住行。??偠灾?,標(biāo)準(zhǔn)無處不在。
當(dāng)然標(biāo)準(zhǔn)具有行業(yè)性與地域性。每個(gè)國家基本都有自己的標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)有些是自己獨(dú)立創(chuàng)造的,但更多的,為了與國際上大部分標(biāo)準(zhǔn)兼容,基本上會(huì)使用國際上一些通用的標(biāo)準(zhǔn),只是改一下名字就可以了。
作為軟件行業(yè)中的老大哥級(jí)人物。C 語言也有自己的標(biāo)準(zhǔn),而且是國際標(biāo)準(zhǔn)。
如果大家遵循同一個(gè)標(biāo)準(zhǔn),那么就會(huì)避免分歧的產(chǎn)生,避免出現(xiàn)很多不必要的麻煩和困擾。按照這統(tǒng)一標(biāo)準(zhǔn)就不會(huì)出現(xiàn)不兼容的問題。
我們先來看下 C 語言標(biāo)準(zhǔn)的發(fā)展歷史:
1. C 語言標(biāo)準(zhǔn)歷史
序號(hào) | 別稱 | 全稱 |
---|---|---|
1 | C18 | ISO/IEC 9899:2018 |
2 | C11 | ISO/IEC 9899:2011 |
3 | C99 | ISO/IEC 9899:1999 |
4 | C95 | ISO/IEC 9899:1990/AMD 1:1995 |
5 | C90 | ISO/IEC 9899:1990 |
6 | C89 | ANSI X3.159-1989 |
最新執(zhí)行的 C 語言的國際標(biāo)準(zhǔn)是序號(hào)為 1 的 C18 標(biāo)準(zhǔn)(ISO/IEC 9899:2018 (C18)),這個(gè)標(biāo)準(zhǔn)是 2018 年通過的 C 語言國際標(biāo)準(zhǔn)。那么 C 語言的標(biāo)準(zhǔn)中都規(guī)定了哪些內(nèi)容呢?下面我們一起來看下:
2. C 語言標(biāo)準(zhǔn)內(nèi)容
這里我將國際標(biāo)準(zhǔn)化組織最新的 C 語言的標(biāo)準(zhǔn)的一部分內(nèi)容放在這里,因?yàn)樗械臉?biāo)準(zhǔn)都不是免費(fèi)提供的,有興趣的同學(xué)可以購買看一下全文。
那么這些標(biāo)準(zhǔn)里面都有哪些內(nèi)容呢?
因?yàn)槲也]有購買 C 語言的最新標(biāo)準(zhǔn),所以我找了一點(diǎn)來自于 C 語言標(biāo)準(zhǔn)中描述。下面這段話就通過文字的描述,定義了有關(guān) main 函數(shù)的細(xì)節(jié):
The function called at program startup is named main. The implementation
declares no prototype for this function. It shall be defined with a return
type of int and with no parameters:
int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names
may be used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent;10) or in some other implementation-defined manner.
這里寫明了 main 函數(shù)是做什么的,應(yīng)該怎么寫,包含了什么參數(shù)以及返回值等。正確的 main 函數(shù)的正確的書寫方法應(yīng)該是 int main(void) { /* ... */ }
或者 int main(int argc, char *argv[]) { /* ... */ }
。而不是我們國內(nèi)隨處可以看到的 void main(void) {/* ... */}
或者 void main(int argc, char *argv[]) { /* ... */ }
。這種寫法在有的編譯器下是會(huì)產(chǎn)生錯(cuò)誤的,導(dǎo)致編譯無法進(jìn)行。而且這個(gè)返回值是可以輸出的,可以作為程序是否正確執(zhí)行的判斷,比如你可以用返回值 0 放在程序執(zhí)行完整后返回,返回 0 就可以判斷程序完整執(zhí)行了。如果返回了其他數(shù)值,那么程序就出現(xiàn)了異常。
由于購買標(biāo)準(zhǔn)太貴了,需要 198 瑞士法郎,折合人民幣 1422.08 元,所以這里只能給大家看一點(diǎn)從其他網(wǎng)站上找到的信息。不過超過 500 頁的標(biāo)準(zhǔn)全文對(duì)于大家學(xué)習(xí)這門語言也沒有太大的益處。只要記住在最新的是最好的就可了。
3. 小結(jié)
標(biāo)準(zhǔn)的重要性不用過多贅述,如同大家使用的眾多版本的安卓手機(jī),和只有一個(gè)版本的蘋果手機(jī)系統(tǒng)一樣。過多的標(biāo)準(zhǔn)會(huì)讓開發(fā)者無所適從,各自對(duì)于自己系統(tǒng)的魔改優(yōu)化,只能讓普通用戶陷入深淵。因此為了避免各自為政的情況出現(xiàn), C 語言很早就有了自己的標(biāo)準(zhǔn),這樣就可以完成一統(tǒng)天下的局面。雖然各個(gè)編譯器有自己的局部特點(diǎn),但是總體而言,只要是按照 C 語言標(biāo)準(zhǔn)編寫的程序可以在任何一個(gè)編譯器上通過編譯。