① c語言執行過程生成的三種文件和擴展名
用C語言編寫的程序成為C語言源程序,源程序文件的擴展名為「.c」。
源程序經編譯生成目標文件(".obj")。
把目標文件與各種庫函數連接起來,生成可執行文件(「.exe」).
C語言程序可以使用在任意架構的處理器上,只要那種架構的處理器具有對應的C語言編譯器和庫,然後將C源代碼編譯、連接成目標二進制文件之後即可運行。
(1)關於可執行文件說法正確c語言擴展閱讀:
C語言是面向過程的編程語言,用戶只需要關注所被解決問題的本身,而不需要花費過多的精力去了解相關硬體,且針對不同的硬體環境,在用C語言實現相同功能時的代碼基本一致,不需或僅需進行少量改動便可完成移植。
這就意味著,對於一台計算機編寫的C程序可以在另一台計算機上輕松地運行,從而極大的減少了程序移植的工作強度。
C語言既有高級語言的特點,又具有匯編語言的特點;既是一個成功的系統設計語言,又是一個實用的程序設計語言;既能用來編寫不依賴計算機硬體的應用程序,又能用來編寫各種系統程序;是一種受歡迎、應用廣泛的程序設計語言。
② c語言源程序文件,目標文件,和可執行文件的擴展名是什麼
根據平台不同,擴展名也有所不同:
1、源程序。
在各個平台上,C語言的源程序擴展名都是相同的,即c。 比如test.c等。
C++的源程序則是cpp。
2、目標文件。
目標文件是源程序經過編譯生成的文件,平台不同,編譯工具不同生成的目標文件擴展名也不同。 在windows上比較常見的為obj, 在Linux下比較常見的為o。另外還有一些比較少見的擴展名,如oo, tco等。
3、可執行文件。
可執行文件是目標文件經過鏈接後,產生的用於運行的文件。
在windows下可執行文件擴展名為exe。
在Linux下可執行文件沒有固定的擴展名,在編譯時默認為out,但實際上可以是任意擴展名甚至沒有擴展名,只要有執行許可權即可。
③ c語言中的源程序必須經過編譯連接生成可執行程序才能運行,這句話是對不對
哥們,這么理解是對的,不過感覺有點表面。
建議看看計算機一些原理,像你說的這個問題我會想到,計算機最終只能識別二進制碼,
所以其實不管我們一切啥語言,最終都是通過編譯器編譯成二進制碼,計算機才能識別
而去運行,而c語言編寫的程序,肯定是要經過一系列的編譯,鏈接,生成可執行的文件。
在windows系統中,執行文件都是.exe為擴展名的。不過在linux系統中就不一樣了,linux
系統並不區分擴展名,所以也就無所謂什麼.exe之類的文件,只要知道最終生成可執行的
二進制文件就可以了。
④ c語言可執行程序文件是通過()和()生成的
源程序文件不是可執行文件。 C源程序文件是一種文本文件,它首先需要編譯器去編譯成目標文件,在通過鏈接器鏈接庫代碼才能形成可執行的二進制exe文件。每一個C語言程序必須要經過編譯和鏈接才能被計算機執行,編譯是將C源碼翻譯成機器碼,鏈接是將將二進制目標文件裝配成一個具有特定格式的二進制可執行文件,比如Windows平台上是PE格式,一般以.exe為擴展名。 一個C語言程序從源碼到計算機系統可以執行,更細致的劃分為:預處理——編譯——匯編——鏈接。預處理是對C語言源碼進行文本處理,編譯階斷是將C源碼經C編譯器生成匯編代碼,匯編階斷是將匯編代碼經匯編器生成二進制機器碼文件。這兩個合攏起來,籠統的可以叫做編譯階斷。語言是一門計算機語言,有自己一定的語法。但是,C語言並不能直接被對象所理解,需要將C語言轉變成可執行代碼,即二進制代碼。在C語言轉變成二進制可執行代碼時,是以工程為單位的。而一個工程中往往會包含多個C文件。因此,需要將每個C文件都編譯成二進制代碼。此時,每個C文件所對應的二進制代碼是獨立的。由於工程是一個系統,所以需要將所有的C文件二進制代碼鏈接到一起,形成一個工程的可執行文件。 綜上,編譯和鏈接就是指的將C文件轉變成二進制代碼,並將各個獨立的C文件二進制代碼鏈接到一起,形成一個可執行文件的過程。
⑤ 在c語言中「可執行程序」是什麼意思
編寫的代碼經過編譯和連接轉為可執行文件的過程。
對於可執行文件中的函數調用,可分別採用動態鏈接或靜態鏈接的方法。使用動態鏈接能夠使最終的可執行文件比較短小,並且當共享對象被多個進程使用時能節約一些內存,因為在內存中只需要保存一份此共享對象的代碼。
但並不是使用動態鏈接就一定比使用靜態鏈接要優越。在某些情況下動態鏈接可能帶來一些性能上損害。
源代碼-->預處理-->編譯-->優化-->匯編-->鏈接-->可執行文件
(5)關於可執行文件說法正確c語言擴展閱讀:
(1)靜態鏈接在這種鏈接方式下,函數的代碼將從其所在地靜態鏈接庫中被拷貝到最終的可執行程序中。這樣該程序在被執行時這些代碼將被裝入到該進程的虛擬地址空間中。
靜態鏈接庫實際上是一個目標文件的集合,其中的每個文件含有庫中的一個或者一組相關函數的代碼。(個人備註:靜態鏈接將鏈接庫的代碼復制到可執行程序中,使得可執行程序體積變大)
(2)動態鏈接在此種方式下,函數的代碼被放到稱作是動態鏈接庫或共享對象的某個目標文件中。鏈接程序此時所作的只是在最終的可執行程序中記錄下共享對象的名字以及其它少量的登記信息。
在此可執行文件被執行時,動態鏈接庫的全部內容將被映射到運行時相應進程的虛地址空間。動態鏈接程序將根據可執行程序中記錄的信息找到相應的函數代碼。
(個人備註:動態鏈接指的是需要鏈接的代碼放到一個共享對象中,共享對象映射到進程虛地址空間,鏈接程序記錄可執行程序將來需要用的代碼信息,根據這些信息迅速定位相應的代碼片段。)
⑥ C語言的可執行程序是由一系列機器指令構成的
第一課C語言程序設計基礎
本課主要知識點:
1.知識點:C程序基礎
l C語言是一種結構化程序設計語言。三種基本結構:順序、選擇、循環。
例1:(2010-09-11)以下關於結構化程序設計的敘述中正確的是(C)
A)一個結構化程序必須同時由順序、分支、循環三種結構組成
B) 結構化程序使用goto語句會很便捷
C) 在C語言中,程序的模塊化是利用函數實現的
D)由三種基本結構構成的程序只能解決小規模的問題
例2:(2011-03-26)計算機高級語言程序的運行方法有編譯執行和解釋執行兩種,以下敘述中正確的是(A)
A)C語言程序僅可以編譯執行
B)C語言程序僅可以解釋執行
C)C語言程序既可以編譯執行又可以解釋執行
D)以上說法都不對
【解析】計算機不能直接理解高級語言,只能直接理解機器語言,所以必須要把高級語言翻譯成機器語言,計算機才能執行高級語言編寫的程序。翻譯的方式有兩種,一個是編譯,一個是解釋。C語言程序僅可以編譯。
例3:(2011-03-26)以下敘述中錯誤的是( D)
A)C語言的可執行程序是由一系列機器指令構成的
B)用C語言編寫的源程序不能直接在計算機上運行
C)通過編譯得到的二進制目標程序需要連接才可以運行
D)在沒有安裝C語言集成開發環境的機器上不能運行C源程序生成的.exe文件
【解析】C程序開發過程:編輯—>(.c)編譯—>(.obj)鏈接—>可執行文件(.exe)
2.知識點:C語言程序的構成
l C程序是由函數構成的,一個C程序有且僅有一個main函數。一個函數由兩部分組成:函數的首部和函數體。函數體包括聲明部分和執行部分。一個C程序總是從main函數開始執行(即程序的入口),由main函數結束,(即程序的出口)。
例1:(2010-03-12)以下敘述正確的是(B)
A)C語言程序是由過程和函數組成的
B) C語言函數可以嵌套調用,例如:fun(fun(x))
C) C語言函數不可以單獨編譯
D)C語言中除了main函數,其他函數不可作為單獨文件形式存在
例2:(2011-09-11)以下敘述中錯誤的是 (C)
A.C語言編寫的函數源程序,其文件名後綴可以是C
B.C語言編寫的函數都可以作為一個獨立的源程序文件
C.C語言編寫的每個函數都可以進行獨立的編譯並執行
D.一個C語言程序只能有一個主函數
3.知識點:標識符
l 命名規則:
①標識符中只能包含字母(a-z,A-Z),數字(0-9),下劃線(_)。
②第一個字元必須是字母或下劃線。
分類
③用戶自定義的標識符 ⅰ格式合法,ⅱ不能使用關鍵字,ⅲ見名知意
例1:(2010-03-13)以下C語言用戶標識符中,不合法的是(D)
A)_1 B)AaBc C)a_b D)a-b
4.知識點:數據類型
例1:(2010-03-16)以下關於C語言數據類型使用的敘述中錯誤的是(D)
A)若要准確無誤差的表示自然數,應使用整數類型
B)若要保存帶有多位小數的數據,應使用雙精度類型
C)若要處理如「人員信息」等含有不同類型的相關數據,應自定義結構體類型
D)若只處理「真」和「假」兩種邏輯值,應使用邏輯類型
【解析】結構數據類型是根據已定義的一個或多個數據類型用構造的方法來定義的,一個結構類型的值可以分解成若干個「成員」或「元素」,每個「成員」都是一個基本數據類型或又是一個構造類型,C項正確。C語言沒有邏輯類型,故D項錯誤