C語言學習:main()函式的正確寫法
C語言雖然是一門古老的語言,但是其標準一直在完善,所以很多以前支援的語法在到當前已經不能在使用了。
C 語言的版本歷史
C語言的版本歷史:
- 【K&R C】 1978 年,Brian K ernighan和Dennis R itchie 合作推出了《The C Programming Language》的第一版,該書被簡稱為K&R(取了作者名字的首字母)。書末的參考指南 (Reference Manual) 一節給出了當時 C 語言的完整定義,成為那時 C 語言事實上的標準,人們稱之為 K&R C。從這一年以後,C 語言被移植到了各種機型上,並受到了廣泛的支援,使 C 語言在當時的軟體開發中幾乎一統天下。
- 【C89】(ANSI C) 隨著 C 語言在多個領域的推廣、應用,一些新的特性不斷被各種編譯器實現並新增進來。於是,建立一個新的“無歧義、於具體平臺無關的 C 語言定義”成為越來越重要的事情。1983 年,ASC X3(ANSI 屬下專門負責資訊科技標準化的機構,現已改名為 INCITS)成立了一個專門的技術委員會 J11(J11 是委員會編號,全稱是 X3J11),負責起草關於 C 語言的標準草案。1989 年,草案被 ANSI 正式通過成為美國國家標準,被稱為 C89 標準。
- 【C90】(ISO C) 隨後,《The C Programming Language》第二版開始出版發行,書中內容根據 ANSI C(C89)進行了更新。1990 年,在 ISO/IEC JTC1/SC22/WG14 (ISO/IEC 聯合技術第 I 委員會第 22 分委員會第 14 工作組) 的努力下,ISO 批准了ANSI C成為國際標準。於是 ISO C(又稱為 C90) 誕生了。除了標準文件在印刷編排上的某些細節不同外,ISO C(C90) 和 ANSI C(C89) 在技術上完全一樣。 ( ofollow,noindex" target="_blank">ISO/IEC 9899:1990 )
- 【C95】 之後,ISO 在 1994、1996 年 分別出版了 C90 的技術勘誤文件,更正了一些印刷錯誤,並在1995 年通過了一份 C90 的技術補充,對 C90 進行了微小的擴充,經過擴充後的 ISO C 被稱為 C95。
- 【C99】 1999 年,ANSI 和 ISO 又通過了最新版本的 C 語言標準和技術勘誤文件,該標準被稱為 C99 。這基本上是目前關於 C 語言的最新、最權威的定義了。( ISO/IEC 9899:1999 )
- 【C11】指ISO標準 ISO/IEC 9899:2011 ,這次修訂新增了被主流C語言編譯器(如GCC,Clang,Visual C++等)增加的內容,和引入了記憶體模型以更好的執行多執行緒。之前C99的一些被推遲的計劃在C11中增加了,但是對C99仍保留向後相容。
- 目前最新版: ISO/IEC 9899:2018
參考連結: https://zh.wikipedia.org/wiki/C%E8%AF%AD%E8%A8%80#%E6%AD%B7%E5%8F%B2
main()函式的正確寫法
常見的寫法:
#include <stdio.h> int main() { printf("Hello, World!\n"); return 0; }
能否寫成“void main()” 或“main()”
void main ( ) { /* ... */ } 在C或者C++的標準中從未出現過,一個合適的可被接受的定義為: int main ( ) { /* ... */ } 和 int main ( int argc , char * argv [ ] ) { /* ... */ } 。main函式返回int型別是向呼叫它的“系統”返回資訊的方式,返回0則表示成功,其他數字則可以定義為錯誤或異常。雖然使用 void main ( ) { /* ... */ } 能在C語言中編譯通過,但是還是不建議使用。另外C++規定必須在main()函式中必須包含return語句。
main ( ) { /* ... */ } ,在ISO C++和C99中是可以省略函式的返回型別的(但會出現如下警告資訊:warning: return type defaults to ‘int’ [-Wimplicit-int]),但是在C89和 ARM C++中必須宣告返回資料的型別,因為其不會將其預設假定為”int”.
與不同的是,在函式宣告中缺少型別時,不會假定為”int”。
“return 0” 能否省略
程式不寫return 0是可以編譯通過的,但是就像前面講的,C++規範中規則了必須在main()函式中必須包含return語句。所以一切還是按照標準比較好。
“int main()”和“int main(void)”的區別
在C++中兩者是沒有區別的,但是在C語言中卻存在差別,都是表示函式不接受任何引數。而在C語言中,int main(void)表示不接受任何引數,但是int main()則表示該函式可以接受任意引數或不接受引數。正常情況下加或者不加影響不大,建議還是加上void好。