關於C標準和編譯器

2021-10-14 08:09:02 字數 866 閱讀 2935

編譯執行源**時出現錯誤error: 『::main』 must return 『int』,將main函式返回型別由void改為int,編譯執行成功。通過蒐集資料知道,這是由於c標準變化產生的問題。

在世界第乙個完整的c語言標準c89/c90中,main()是正確的。但在c99標準中,只有以下兩種定義方式是正確的:

int main(void)

int main(int argc,char *ar**)

main函式的返回值型別必須是int,這樣返回值才能傳遞作業系統。如果main函式的最後沒有寫return語句的話,c99規定編譯器要自動在生成的目標檔案中加入return 0,表示程式正常退出。

一般情況下,在編譯檔案時我們不會關注採用的標準,只有當需要使用某個特定標準的特性,或是要規範所有**時,我們可以給編譯器指定c語言標準,限制所採用的標準。c99標準是c語言的第二個官方標準,但是各個公司對c99的支援所表現出來的興趣不同。gcc和其它一些商業編譯器支援c99的大部分特性,微軟和borland卻似乎對此不感興趣。

c語言標準雖然是國際標準化組織制定的,但是具體編譯器的實現和標準制定還是有所不同的。比如gnu gcc 編譯器就新增了自己的語法規則,還有嵌入式領域的keil c51編譯器(多定義了自己的資料型別);還有基於llvm框架的clang編譯器;還有和visual studio2015整合的vc++ compiler(包含了微軟自定義的內聯彙編的語法)都有各自的特殊語法規則,但大體來說每個c語言編譯器還是實現了標準文件裡面的大部分特性。所以如果需要幫助文件,查詢所用的編譯器的官方文件是最實用的。

最流行的c語言編譯器有以下幾種:gnu compiler collection 或稱 gcc;microsoft c 或稱 ms c;borland turbo c 或稱 turbo c。

關於C語言編譯器和C語言標準

很多同學在剛開始學習c語言的時候,基本不會也不用去了解c語言的基本資訊,比如,c語言標準c11和c99。還有的同學不知道c語言編譯器究竟是個什麼東西,有何作用。為了解答初學者的疑惑,筆者給大家簡單明瞭的解釋一下,只是拋磚引玉,歡迎大咖們指正。編譯器 簡單的說,編譯器的任務就是把人類可看懂的源 變成機...

c 編譯器編譯過程

編譯過程 編譯過程分為四步 預處理 編譯 彙編 連線 1.預處理 預處理主要處理原始檔中的 include define 等預處理等命令 預處理主要完成的工作有 參考 程式設計師的自我修養 1 刪除 define,展開巨集 2 處理條件編譯指令。預處理程式先判斷條件,再根據條件修改源 3 刪除注釋 ...

關於c 模板函式編譯器內幕

寫乙個簡單模板函式,功能是將輸入的值增加2,用了4個不同型別的實參,分別是int,float,char和int p 型別,通過反彙編發現,的確生成了4函式 addtwoiiet s0,addtwoifet s0,addtwoicet s0,addtwoipiet s1 通過對比函式名,不難有如下發現...