導航:首頁 > 源碼編譯 > 一個c語言程序總是從編譯

一個c語言程序總是從編譯

發布時間:2022-05-12 10:28:33

㈠ 一個c語言程序的執行總是從該函數的main開始,在main函數最後結束

main()函數稱之為主函數,一個C程序總是從main()函數開始執行的,但是不一定在main函數最後結束。

在 main() 之後的最後一條語句結束後,程序還要運行一些代碼,以正常返回操作系統。main函數執行完後還執行其他語句,

有時候需要有一種與程序退出方式無關的方法來進行程序退出時的必要處理,方法就是用atexit()函數來注冊程序正常終止時要被調用的函數,atexit()函數的參數是一個函數指針,函數指針指向一個沒有參數也沒有返回值的函數,它的原型是:

int atexit(void (*)(void));

(1)一個c語言程序總是從編譯擴展閱讀

main函數的使用

示例:

#include <stdlib.h>

#include <stdio.h>

void fn1(void);

void fn2(void);

int main(void)

{

atexit(fn1);

atexit(fn2);

printf("main exit ... ");

return 0;

}

void fn1()

{

printf("calling fn1()... ");

}

void fn2()

{

printf("calling fn2()... ");

}

㈡ C語言編譯原理是什麼

編譯共分為四個階段:預處理階段、編譯階段、匯編階段、鏈接階段。

1、預處理階段:

主要工作是將頭文件插入到所寫的代碼中,生成擴展名為「.i」的文件替換原來的擴展名為「.c」的文件,但是原來的文件仍然保留,只是執行過程中的實際文件發生了改變。(這里所說的替換並不是指原來的文件被刪除)

2、匯編階段:

插入匯編語言程序,將代碼翻譯成匯編語言。編譯器首先要檢查代碼的規范性、是否有語法錯誤等,以確定代碼的實際要做的工作,在檢查無誤後,編譯器把代碼翻譯成匯編語言,同時將擴展名為「.i」的文件翻譯成擴展名為「.s」的文件。

3、編譯階段:

將匯編語言翻譯成機器語言指令,並將指令打包封存成可重定位目標程序的格式,將擴展名為「.s」的文件翻譯成擴展名為「.o」的二進制文件。

4、鏈接階段:

在示例代碼中,改代碼文件調用了標准庫中printf函數。而printf函數的實際存儲位置是一個單獨編譯的目標文件(編譯的結果也是擴展名為「.o」的文件),所以此時主函數調用的時候,需要將該文件(即printf函數所在的編譯文件)與hello world文件整合到一起,此時鏈接器就可以大顯神通了,將兩個文件合並後生成一個可執行目標文件。

㈢ 2 一個C語言程序總是從()開始執行。

一個C語言程序總是從main()主函數開始執行。main是相對來說的,如同音學理論之主調於泛音,泛音即程序中的除main之外的其他函數,迎合人們的思考方式而生成的而非必定的模式。有主有次,執行起來條清縷析,既可將程序模塊化又實現了一個閉合的整體。

main 函數在程序啟動中完成對具有靜態存儲期的非局部對象的初始化之後被調用的。它是程序在有宿主 (hosted)環境(亦即有操作系統)中所指定的入口點。自立程序(啟動載入器,操作系統內核,等等)的入口點則由實現定義的。

主函數的兩個形參形式中的形參,允許從執行環境中傳遞任意的多位元組字元串(它們通常被稱為命令行參數),各個指針 argv[1] .. argv[argc-1] 指向每個這些字元串的第一個字元。argv[0] 是指向一個表示用於執行該程序自身的名字的空結尾多位元組字元串(或者當執行環境不支持時,為空字元串 "")的開頭字元的指針。

這些字元串是可以改動的,雖然對它們的改動並不會被傳回給執行環境:比如可以用 std::strtok 來使用它們。由 argv 所指向的數組的大小至少為 argc+1,其最後一個元素 argv[argc] 保證為一個空指針。

(3)一個c語言程序總是從編譯擴展閱讀

main 函數的返回值類型必須是 int ,這樣返回值才能傳遞給程序的激活者(如操作系統)。

如果 main 函數的最後沒有寫 return 語句的話,C99 規定編譯器要自動在生成的目標文件中(如 exe 文件)加入return 0; ,表示程序正常退出。不過,建議在main函數的最後加上return 語句,雖然沒有這個必要,但這是一個好的習慣。

也就是說在最新的C語言標准中強制要求main函數的返回值類型為int,main函數的返回值是傳遞給操作系統,讓操作系統判斷程序的執行情況(是正常結束還是出現異常)。

㈣ c語言中的源程序必須經過編譯連接生成可執行程序才能運行,這句話是對不對

哥們,這么理解是對的,不過感覺有點表面。
建議看看計算機一些原理,像你說的這個問題我會想到,計算機最終只能識別二進制碼,
所以其實不管我們一切啥語言,最終都是通過編譯器編譯成二進制碼,計算機才能識別
而去運行,而c語言編寫的程序,肯定是要經過一系列的編譯,鏈接,生成可執行的文件。
在windows系統中,執行文件都是.exe為擴展名的。不過在linux系統中就不一樣了,linux
系統並不區分擴展名,所以也就無所謂什麼.exe之類的文件,只要知道最終生成可執行的
二進制文件就可以了。

㈤ 在一個C語言程序的執行是從( )。 A) 本程序的main函數開始,到main函數結束。 B)

從main函數開始到main函數結束。

答案選A。

C語言常考考點:

1、一個C語言源程序可以由一個或多個源文件組成。

2、每個源文件可由一個或多個函數組成。

3、一個源程序不論由多少個文件組成,都有一個且只能有一個main函數,即主函數。是整個程序的入口。

4、源程序中可以有預處理命令(包括include 命令,ifdef、ifndef命令、define命令),預處理命令通常應放在源文件或源程序的最前面。

5、每一個說明,每一個語句都必須以分號結尾。但預處理命令,函數頭和花括弧「}」之後不能加分號。(結構體、聯合體、枚舉型的聲明的「}」後要加「 ;」。)

6、標識符,關鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。

(5)一個c語言程序總是從編譯擴展閱讀:

C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。

盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。

二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局為C語言制定了一套完整的美國國家標准語法,稱為ANSI C,作為C語言最初的標准。[1]目前2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)發布的C11標準是C語言的第三個官方標准,也是C語言的最新標准,該標准更好的支持了漢字函數名和漢字標識符,一定程度上實現了漢字編程。

C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。

其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

㈥ 一個完整的C程序由什麼組成

C語言的構成如下:

1、數據類型

C的數據類型包括:整型、字元型、實型或浮點型(單精度和雙精度)、枚舉類型、數組類型、結構體類型、共用體類型、指針類型和空類型。

2、常量與變數

常量其值不可改變,符號常量名通常用大寫。變數是以某標識符為名字,其值可以改變的量。標識符是以字母或下劃線開頭的一串由字母、數字或下劃線構成的序列,請注意第一個字元必須為字母或下劃線,否則為不合法的變數名。變數在編譯時為其分配相應存儲單元。

3、數組

如果一個變數名後面跟著一個有數字的中括弧,這個聲明就是數組聲明。字元串也是一種數組。它們以ASCII的NULL作為數組的結束。要特別注意的是,方括內的索引值是從0算起的。

4、指針

如果一個變數聲明時在前面使用*號,表明這是個指針型變數。換句話說,該變數存儲一個地址,而 *(此處特指單目運算符 * 。C語言中另有 雙目運算符 *) 則是取內容操作符,意思是取這個內存地址里存儲的內容。指針是 C 語言區別於其他同時代高級語言的主要特徵之一。

5、字元串

C語言的字元串其實就是以''字元結尾的char型數組,使用字元型並不需要引用庫,但是使用字元串就需要C標准庫裡面的一些用於對字元串進行操作的函數。它們不同於字元數組。使用這些函數需要引用頭文件<string.h>。

6、文件輸入/輸出

在C語言中,輸入和輸出是經由標准庫中的一組函數來實現的。在ANSI C中,這些函數被定義在頭文件<stdio.h>中。

7、運算

C語言的運算非常靈活,功能十分豐富,運算種類遠多於其它程序設計語言。在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單,但初學者往往會覺的這種表達式難讀,關鍵原因就是對運算符和運算順序理解不透不全。

(6)一個c語言程序總是從編譯擴展閱讀:

1、語言簡潔、緊湊,使用方便、靈活

C語言是一個很小的內核語言,只包括極少的與硬體有關的成分,C語言不直接提供輸入和輸出語句、有關文件操作的語句和動態內存管理的語句等(這些操作由編譯系統所提供的庫函數來實現的),C的編譯系統相當簡潔。

2、運算符豐富

C語言的運算符包含的范圍很廣泛,共有34種運算符。C語言把括弧、賦值和強制類型轉換等都作為運算符處理,從而使C語言喲運算類型極其豐富,表達式類型多樣化。

3、數據類型豐富

C語言提供的數據類型包括:整型、浮點型、字元型、數組類型、指針類型、結構體類型和共用體類型等,C99又擴充了復數浮點類型、超長整型和布爾類型等。尤其是指針類型數據,使用十分靈活和多樣化,能用來實現各種復雜的運算。

4、具有結構化的控制語句

如if…else語句、do…while語句、switch語句和for語句等。用函數作為程序的模塊單位,便於實現程序的模塊化。

5、語法限制不太嚴格,程序設置自由度大。

6、C語言允許直接訪問物理地址,能進行位操作,能實現匯編語言的大部分功能,可以直接對硬體進行操作。C語言既具有高級語言的功能,又具有低級語言的許多功能,可用來編寫系統軟體。

7、用C語言編寫的程序可移植性好。

8、生成目標代碼質量高,程序執行效率高。

㈦ C語言源程序文件經過編譯連接之後生成一個後綴為_____的文件。

如果只生成一個文件,那麼這個題目答案是B。編譯(compile)後生成目標文件,後綴:.obj。也就是機器碼。

然後鏈接器(Linker) 連接生成可執行文件,後綴:.exe。最後運行命令(go),直接運行.exe文件。

(7)一個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)。

㈧ 開發一個c語言程序要經過哪四個步驟

開發一個C語言程序需要經過的四個步驟:編輯、編譯、連接、運行。

C語言程序可以使用在任意架構的處理器上,只要那種架構的處理器具有對應的C語言編譯器和庫,然後將C源代碼編譯、連接成目標二進制文件之後即可運行。

1、預處理:輸入源程序並保存(.C文件)。

2、編譯:將源程序翻譯為目標文件(.OBJ文件)。

3、鏈接:將目標文件生成可執行文件( .EXE文件)。

4、運行:執行.EXE文件,得到運行結果。

(8)一個c語言程序總是從編譯擴展閱讀:

C語言代碼變為程序的幾個階段:

1、首先是源代碼文件test.c和相關的頭文件,如stdio.h等被預處理器cpp預處理成一個.i文件。經過預編譯後的.i文件不包含任何宏定義,因為所有的宏已經被展開,並且包含的文件也已經被插入到.i文件中。

2、編譯過程就是把預處理完的文件進行一系列的詞法分析、語法分析、語義分析以及優化後產生相應的匯編代碼文件,這個過程往往是我們所說的整個程序的構建的核心部分,也是最復雜的部分之一。

3、匯編器不直接輸出可執行文件而是輸出一個目標文件,匯編器可以調用ld產生一個能夠運行的可執行程序。即需要將一大堆文件鏈接起來才可以得到「a.out」,即最終的可執行文件。

4、在鏈接過程中,對其他定義在目標文件中的函數調用的指令需要被重新調整,對實用其他定義在其他目標文件的變數來說,也存在同樣問題。

參考資料來源:網路-c語言

㈨ 一個C語言源程序經過編譯後就可以執行了 這句話對嗎

對的,C語言是先編譯後執行,一般只要不出錯誤,編譯完就可以執行力。有時候還要考慮是否跨平台。

閱讀全文

與一個c語言程序總是從編譯相關的資料

熱點內容
拆二代程序員 瀏覽:396
河北壓縮空氣冷干機生產廠家 瀏覽:578
圖論與java 瀏覽:575
程序員寫代碼告白初音 瀏覽:738
sshpdf 瀏覽:539
windows調用linux 瀏覽:594
如何查找本地伺服器名稱 瀏覽:819
linux文件只讀屬性 瀏覽:585
VNAS技術加密 瀏覽:131
python編程電話費計算話費 瀏覽:463
c編譯文件怎麼改名 瀏覽:626
pdf轉格式軟體 瀏覽:875
單片機原理及應用第二版第八章答案 瀏覽:536
伺服器一百個節點相當於什麼 瀏覽:344
綏化電氣編程培訓 瀏覽:374
輕量應用伺服器怎麼添加軟體上去 瀏覽:813
資產管理pdf 瀏覽:170
製冷壓縮機熱負荷過低 瀏覽:364
伺服器出現兩個IPV4地址 瀏覽:848
宜興雲存儲伺服器 瀏覽:221