A. c語言源程序文件經過編譯後生成文件的擴展名
c語言源程序文件經過編譯後生成文件的擴展名.obj。
當C語言源代碼被編譯後,通常會生成一個「.o」(object file)文件。這個文件包含了編譯器所產生的機器代碼,但是它還沒有被鏈接到其他模塊或庫中。相應地,在不同的操作系統上可能會有不同的後綴名和二進制格式。例如,Windows上的Visual C++編譯器使用「.obj」作為目標文件的擴展名。
在大多數情況下,C語言經過編譯後生成的文件後綴名是「.o」,也可以是「.obj」或其他操作系統特定的格式。這些文件包含了編譯器所產生的機器代碼,並且通常需要鏈接到一起才能生成可執行文件。
C語言簡介
C語言是一門面向過程的計算機編程語言,與C++、C#、Java面向對象編程語言有所不同。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、僅產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
C語言描述問題比匯編語言迅速、工作量小、可讀性好、易於調試、修改和移植,而代碼質量與匯編語言相當。C語言一般只比匯編語言代碼生成的目標程序效率低10%—20%,因此C語言可以編寫系統軟體。
當前階段,在編程領域中,C語言的運用非常之多,它兼顧了高級語言和匯編語言的優點,相較於其它編程語言具有較大優勢。計算機系統設計以及應用程序編寫,是C語言應用的兩大領域。同時,C語言的普適較強,在許多計算機操作系統中都能夠得到適用,且效率顯著。
B. C語言執行過程生成的三種文件和擴展名
C語言開發過程中會生成三種類型的文件,它們分別具有不同的擴展名:
首先是源代碼文件,通常使用".c"作為擴展名;其次是目標代碼文件,其擴展名為".obj";最後是可執行文件,其擴展名為".exe"。
源代碼文件經過編譯(compile)處理後會生成目標代碼文件,目標代碼文件進一步經過鏈接(link)處理後會生成可執行文件。使用微軟的Visual C++ 6.0開發工具時,在狀態輸出窗口中,你可以看到編譯和鏈接的進度,比如會顯示"compiling...",然後是"linking..."。
編譯過程負責將源代碼文件中的C語言代碼轉換成匯編代碼,生成目標代碼文件。這個過程中,編譯器會檢查語法錯誤,優化代碼,並生成中間形式的代碼。
鏈接過程則將多個目標代碼文件合並為一個完整的可執行文件。在鏈接過程中,鏈接器會解析各個目標文件中的符號引用,將其合並成一個程序,同時也會進行靜態鏈接庫的處理。
可執行文件是最終的程序文件,可以直接運行。它包含了程序運行所需的全部信息,包括代碼、數據以及動態鏈接庫的引用等。
在使用開發工具進行C語言程序開發時,理解這些文件類型及其生成過程對於提高開發效率非常重要。熟悉這些過程有助於開發者更好地利用工具,解決編譯和鏈接過程中出現的問題。
C. gcc緙栬瘧鍣ㄧ敓鎴愮殑鐩鏍囨枃浠舵槸浠涔堬紵
1銆侀勫勭悊
鍦ㄨ繖涓闃舵碉紝婧愮爜涓鐨勬墍鏈夐勫勭悊璇鍙ュ緱鍒板勭悊錛屼緥濡傦細#include璇鍙ユ墍鍖呭惈鐨勬枃浠跺唴瀹規浛鎹㈡帀璇鍙ユ湰韜錛屾墍鏈夊凡瀹氫箟鐨勫畯琚灞曞紑銆
鏍規嵁#ifdef錛#if絳夎鍙ョ殑鏉′歡鏄鍚︽垚絝嬪彇鑸嶇浉搴旂殑閮ㄥ垎錛岄勫勭悊涔嬪悗婧愮爜涓涓嶅啀鍖呭惈浠諱綍棰勫勭悊璇鍙ャ
GCC棰勫勭悊闃舵靛彲浠ョ敓鎴.i鐨勬枃浠訛紝閫氳繃閫夐」-E鍙浠ヤ嬌緙栬瘧鍣ㄥ湪棰勫勭悊緇撴潫鏃跺氨鍋滄㈢紪璇戙備緥濡傦細gcc -E -o hello.i hello.c
2銆佺紪璇
榪欎竴闃舵碉紝緙栬瘧鍣ㄥ規簮鐮佽繘琛岃瘝娉曞垎鏋愩佽娉曞垎鏋愩佷紭鍖栫瓑鎿嶄綔錛屾渶鍚庣敓鎴愭眹緙栦唬鐮併傝繖鏄鏁翠釜榪囩▼涓鏈閲嶈佺殑涓姝ワ紝鍥犳や篃甯告妸鏁翠釜榪囩▼縐頒負緙栬瘧銆
鍙浠ラ氳繃閫夐」-S浣縂CC鍦ㄨ繘琛屽畬緙栬瘧鍚庡仠姝錛岀敓鎴.s鐨勬眹緙栫▼搴忋備緥濡傦細gcc -S -o hello.s hello.c
3銆佹眹緙
榪欎竴闃舵典嬌鐢ㄦ眹緙栧櫒瀵規眹緙栦唬鐮佽繘琛屽勭悊錛岀敓鎴愭満鍣ㄨ璦浠g爜錛屼繚瀛樺湪鍚庣紑涓.o鐨勭洰鏍囨枃浠朵腑銆
褰撶▼搴忕敱澶氫釜浠g爜鏂囦歡鏋勬垚鏃訛紝姣忎釜鏂囦歡閮借佸厛瀹屾垚奼囩紪宸ヤ綔錛岀敓鎴.o鐩鏍囨枃浠跺悗錛屾墠鑳借繘鍏ヤ笅涓姝ョ殑閾炬帴宸ヤ綔銆
鐩鏍囨枃浠跺凡緇忔槸鏈緇堢▼搴忕殑鏌愪竴閮ㄥ垎浜嗭紝鍙鏄鍦ㄩ摼鎺ヤ箣鍓嶈繕涓嶈兘鎵ц屻傚彲浠ラ氳繃-c閫夐」鐢熸垚鐩鏍囨枃浠訛細gcc -c -o hello.o hello.c
4銆侀摼鎺
緇忚繃奼囩紪浠ュ悗鐨勬満鍣ㄤ唬鐮佽繕涓嶈兘鐩存帴榪愯屻備負浜嗕嬌鎿嶄綔緋葷粺鑳藉熸g『鍔犺澆鍙鎵ц屾枃浠訛紝鏂囦歡涓蹇呴』鍖呭惈鍥哄畾鏍煎紡鐨勪俊鎮澶達紝榪樺繀欏諱笌緋葷粺鎻愪緵鐨勫惎鍔ㄤ唬鐮侀摼鎺ヨ搗鏉ユ墠鑳芥e父榪愯岋紝榪欎簺宸ヤ綔閮芥槸鐢遍摼鎺ュ櫒鏉ュ畬鎴愮殑銆倈cc -o hello hello.c
5銆佽繍琛岋細鎵ц.EXE鏂囦歡錛屽緱鍒拌繍琛岀粨鏋溿
D. C語言源程序文件經過編譯連接之後生成一個後綴為_____的文件。
如果只生成一個文件,那麼這個題目答案是B。編譯(compile)後生成目標文件,後綴:.obj。也就是機器碼。
然後鏈接器(Linker) 連接生成可執行文件,後綴:.exe。最後運行命令(go),直接運行.exe文件。
(4)c源程序通過編譯得到的目標文件擴展閱讀:
簡單講,編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。
一個現代編譯器的主要工作流程:源代碼(source code) →預處理器(preprocessor) →編譯器(compiler) →目標代碼(object code) →鏈接器(Linker) → 可執行程序(executables)
高級計算機語言便於人編寫,閱讀交流,維護。機器語言是計算機能直接解讀、運行的。
編譯器將匯編或高級計算機語言源程序(Source program)作為輸入,翻譯成目標語言(Target language)機器代碼的等價程序。
源代碼一般為高級語言 (High-level language), 如Pascal、C、C++、Java、漢語編程等或匯編語言。
而目標則是機器語言的目標代碼(Object code),有時也稱作機器代碼(Machine code)。
對於C#、VB等高級語言而言,此時編譯器完成的功能是把源碼(SourceCode)編譯成通用中間語言(MSIL/CIL)的位元組碼(ByteCode)。
最後運行的時候通過通用語言運行庫的轉換,編程最終可以被CPU直接計算的機器碼(NativeCode)。
E. c語言編譯生成的.obj文件解釋下
c語言編譯生成的.obj文件是一種文本文件,程序編譯時生成的中間代碼文件目標文件,一般是程序編譯後的二進制文件,再通過鏈接器和資源文件鏈接就成可執行文件了。OBJ只給出了程序的相對地址,而可執行文件是絕對地址。
obj文件基本結構:OBJ文件不需要任何種文件頭(File Header),盡管經常使用幾行文件信息的注釋作為文件的開頭。
OBJ文件由一行行文本組成,注釋行以符號「#」為開頭,空格和空行可以隨意加到文件中以增加文件的可讀性。有字的行都由一兩個標記字母也就是關鍵字(Keyword)開頭,關鍵字可以說明這一行是什麼樣的數據。
(5)c源程序通過編譯得到的目標文件擴展閱讀:
C編譯的整個過程很復雜,大致可以分為以下階段:
1、預處理階段
在該階段主要完成對源代碼的預處理工作,主要包括對宏定義指令,頭文件包含指令,預定義指令和特殊字元的處理,如對宏定義的替換以及文件頭中所包含的文件中預定義代碼的替換等,總之這步主要完成一些替換工作,輸出是同源文件含義相同但內容不同的文件。
2、編譯、優化階段
編譯就是將第一階段處理得到的文件通過詞法語法分析等轉換為匯編語言。優化包括對中間代碼的優化,如刪除公共表達式,循環優化等;和對目標代碼的生成進行的優化,如如何充分利用機器的寄存器存放有關變數的值,以減少內存訪問次數。
3、匯編階段
將匯編語言翻譯成機器指令。