日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言的实现经过(C代码到CPU执行)

發(fā)布時(shí)間:2024/10/14 编程问答 94 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言的实现经过(C代码到CPU执行) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
2018-01-05 創(chuàng)建人:Ruo_Xiao 2018-01-06 修改人:Ruo_Xiao 1、添加編輯器之后,預(yù)處理之前的編譯器的操作。 2、添加對(duì)優(yōu)化器的簡(jiǎn)單的說明。 2018-01-12 修改人:Ruo_Xiao 修正最后的邏輯總圖,添加“源代碼處理”。 2018-01-20 修改人:Ruo_Xiao 增加對(duì)編譯器和連接器更詳細(xì)的說明。

一、概括

C源代碼 -> C編輯器 -> 源代碼處理 -> 預(yù)處理器 -> C編譯器 ->(優(yōu)化器) -> 連接器 -> 可執(zhí)行文件 -> CPU執(zhí)行

二、C源代碼

英文:Source Code。

三、C編輯器

  • 用C語言編寫的程序都存儲(chǔ)在文本文件中,該文件被稱為源代碼文件(Source Code Files),大多數(shù)系統(tǒng)都以“.c”為擴(kuò)展名。
    拓展:點(diǎn)號(hào)“.”前面的部分被稱為基本名(Basename),點(diǎn)號(hào)后面的部分被稱為擴(kuò)展名(Extension),基本名和拓展名的組合被稱為文件名。
  • 常用的C編輯器有:
    (1)windows:記事本(notepad)。(需要修改擴(kuò)展名)
    (2)Linux:Vi、Vim。
    (3)Unix:emacs、jove、Vi、X Window System文本編輯器。
  • 有的C編輯器具有自動(dòng)糾錯(cuò)功能,例如Vim。
  • 四、源代碼處理

    1、編譯器把源代碼中出現(xiàn)的字符映射到源字符集,該過程處理多字節(jié)字符和三字符序列。
    2、編譯器定位每個(gè)反斜杠后面跟著換行符實(shí)例,并刪除它們。也就是說把下面兩個(gè)物理行(physical line):

    printf("Hello,my\wife!/n");

    轉(zhuǎn)化為一個(gè)邏輯行(logical line)。

    printf("Hello,my wife!/n");

    3、編譯器將文本劃分成預(yù)處理記號(hào)序列、空白序列和注釋序列(記號(hào)是由空格、制表符或換行符分隔的項(xiàng))。這里,編譯器將空白字符序列和注釋序列用一個(gè)空格替換。所以下面代碼

    int/*我是注釋!*/i = 0;

    變成了

    int i = 0;

    五、預(yù)處理器

  • 預(yù)處理器是在真正的編譯開始之前由編譯器調(diào)用的獨(dú)立程序。
  • 預(yù)處理器指令以#號(hào)開頭標(biāo)識(shí),末尾不包含分號(hào)。
  • 主要功能有文件包含、宏替換、條件編譯等。
  • 在編譯的預(yù)處理階段實(shí)現(xiàn)的功能:
    (1)將頭文件加載到代碼中。
    (2)對(duì)宏進(jìn)行替換。等等
    再根據(jù)條件編譯指令,最終生成新的源代碼,傳給編譯器。
  • 六、C編譯器

  • 英文: C Compiler。
  • 是將經(jīng)過預(yù)處理器處理之后的C代碼翻譯成對(duì)應(yīng)于各種CPU能夠執(zhí)行的可執(zhí)行代碼的程序。
    拓展:可執(zhí)行代碼,用計(jì)算機(jī)的機(jī)器語言表示的代碼,這種語言是由數(shù)字碼表示的指令組成,即CPU的微指令。
  • 編譯器檢查的是語法、函數(shù)與變量的聲明是否正確。
  • 存儲(chǔ)編譯器生成的可執(zhí)行代碼的文件被稱為目標(biāo)文件(Object file)。
    拓展:目標(biāo)文件
    (1)擴(kuò)展名:
    Unix/Linux:“.o”。
    Windows:“.obj”。
    (2)目標(biāo)文件雖然包含機(jī)器語言代碼,但是不能直接運(yùn)行,原因如下:
    A、缺少啟動(dòng)代碼(Startup Code),啟動(dòng)代碼充當(dāng)著程序和操作系統(tǒng)的之間的接口。
    B、缺少庫函數(shù)代碼,只是包含了庫函數(shù)的指令。
  • 種類
    (1)GNU編譯器集合(GCC,其中包含GCC C 編譯器),Linux和Unix下使用gcc即可調(diào)用GCC C 編譯器。
    (2)GCC編譯器在windows上的運(yùn)行的軟件是Cygwin和MinGW。
    (3)LLVM項(xiàng)目的Clang編譯器,通過clang調(diào)用,應(yīng)用于Linux和FreeBSD(默認(rèn))中。
    (4)VC和VS。
    (5)cc 是 Unix系統(tǒng)的 C Compiler,一個(gè)是古老的 C 編譯器。
  • 七、優(yōu)化器

  • 對(duì)目標(biāo)代碼進(jìn)行進(jìn)一步處理,使其效率更高。
  • 只針對(duì)Release,Debug不進(jìn)行處理。
  • 八、連接器

  • 將編譯器生成的目標(biāo)文件中的代碼、系統(tǒng)的標(biāo)準(zhǔn)啟動(dòng)代碼和庫代碼三者合并成一個(gè)文件,即可執(zhí)行文件。
  • 主要是鏈接函數(shù)和全局變量。鏈接器會(huì)在所有的Object File中找尋函數(shù)的實(shí)現(xiàn),如果找不到,那到就會(huì)報(bào)鏈接錯(cuò)誤碼(Linker Error)。在VC下,這種錯(cuò)誤一般是:Link 2001錯(cuò)誤,意思說是說,鏈接器未能找到函數(shù)的實(shí)現(xiàn),你需要指定函數(shù)的ObjectFile。
  • 九、可執(zhí)行文件

  • windows:擴(kuò)展名為“.exe”。
  • Unix/Linux:擴(kuò)展名“.out”。
  • 十、CPU執(zhí)行

  • 能讓CPU執(zhí)行的只要其特有的微指令集。
  • 可執(zhí)行文件就是由微指令集中的指令構(gòu)成,故在windows下,雙擊exe就可以讓CPU開始按照C源代碼中所設(shè)想的那樣工作了。
  • 十一、流程圖

    總結(jié)

    以上是生活随笔為你收集整理的C语言的实现经过(C代码到CPU执行)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。