最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言程序環(huán)境編譯+鏈接理論

 更新時間:2022年04月27日 08:43:13   作者:不知名小賴  
這篇文章主要介紹了C語言程序環(huán)境編譯+鏈接理論,下面文章基于C語言的相關資料展開對編譯和鏈接的詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下

一、程序的翻譯環(huán)境(編譯和鏈接)

在ANSI C 的任何一種實現(xiàn)中,存在兩個不同的環(huán)境:

  • 第一種是翻譯環(huán)境,在這個環(huán)境中源代碼被轉換成可執(zhí)行的機器指令。
  • 第二種是執(zhí)行環(huán)境,它用于實際執(zhí)行代碼。

如下圖:就是我們編譯器編譯一個源文件到一個可執(zhí)行文件的大致過程

  • 組成一個程序的每個源文件(test.c)通過編譯過程分別轉換成目標代碼(test.obj)
  • 每個目標文件又由鏈接器(linker)捆綁在一起,形成一個單一而完整的可執(zhí)行程序。
  • 鏈接器同時會引入標準c函數(shù)庫中任何被該程序所用到的函數(shù)。

對于一個源文件(test.c)變成最終的二進制文件(test.exe)可以通過下圖簡單表示:

看上圖我們知道:編譯又分三步:

預編譯 (預處理)(test.c —>test.i)

  • (1)處理所有的注釋,以空格代替
  • (2)將所有的#define刪除,并展開所有的宏定義
  • (3)處理條件編譯指令#if、#ifdef、#elif、#else、#endif
  • (4)處理#include,展開被包含的文件
  • (5)保留編譯器需要使用的#pragma指令

編譯 (test.i —>test.s)

  • (1)把C語言代碼編譯成匯編代碼
  • (2)進行語法分析,詞法分析,語義分析,符號匯總形成符號表

匯編 (test.s —>test.o)

  • 匯編過程實際上指把匯編語言代碼翻譯成目標機器指令的過程。對于被翻譯系統(tǒng)處理的每個C語言源程序,都將最終經過這一處理而得到相應的目標文件。 目標文件中所存放的也就是與源程序等效的目標的機器語言代碼。

編譯完后執(zhí)行鏈接,鏈接會做哪些事呢?

  • 合并段表
  • 符號表的合并和符號表的重定位
  • 最后形成(test.exe)

二、程序的運行環(huán)境

  • 程序必須載入內存,在有操作系統(tǒng)的環(huán)境中:一般這個由操作系統(tǒng)來完成。在獨立的環(huán)境中,程序的載入必須由手工安排,也可能是通過可執(zhí)行代碼置入只讀內存來完成。
  • 程序的執(zhí)行便開始,接著調用main函數(shù)。
  • 開始執(zhí)行程序代碼,這個時候程序將使用一個運行時堆棧,存儲函數(shù)的局部變量和返回地址,程序同時也使用靜態(tài)(static)內存,存儲與靜態(tài)內存中的變量在程序的整個執(zhí)行過程一直保留他們的值。
  • 終止程序。正常終止main函數(shù),也可能是意外終止(代碼出錯)

到此這篇關于C語言程序環(huán)境編譯+鏈接理論的文章就介紹到這了,更多相關C語言編譯+鏈接內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++指針和數(shù)組:字符和字符串、字符數(shù)組的關聯(lián)和區(qū)別

    C++指針和數(shù)組:字符和字符串、字符數(shù)組的關聯(lián)和區(qū)別

    字符串是一種重要的數(shù)據(jù)類型,但是c語言并沒有顯示的字符串數(shù)據(jù)類型,因為字符串以字符串常量的形式出現(xiàn)或者存儲于字符數(shù)組中。在C++標準模板庫(STL)中提供了string類,實現(xiàn)了對字符串的封裝。
    2022-12-12
  • 淺析ORB、SURF、SIFT特征點提取方法以及ICP匹配方法

    淺析ORB、SURF、SIFT特征點提取方法以及ICP匹配方法

    這篇文章主要為大家介紹了常用的特征點提取方法(ORB、SURF、SIFT)和ICP匹配方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2021-12-12
  • 詳解C++中的析構函數(shù)

    詳解C++中的析構函數(shù)

    這篇文章主要介紹了C++中的析構函數(shù)的相關知識,文中講解非常詳細,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • C語言實現(xiàn)輸出各種三角形

    C語言實現(xiàn)輸出各種三角形

    這篇文章主要介紹了C語言實現(xiàn)輸出各種三角形方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C++使用QTcreator創(chuàng)建動態(tài)庫流程

    C++使用QTcreator創(chuàng)建動態(tài)庫流程

    在工程中,經常會根據(jù)不同的場景需求將類封裝成庫文件,本文主要介紹了C++使用QTcreator創(chuàng)建動態(tài)庫流程,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • vscode C++遠程調試運行(學習C++用)

    vscode C++遠程調試運行(學習C++用)

    這篇文章主要介紹了vscode C++遠程調試運行(學習C++用),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Opencv開發(fā)實現(xiàn)拼圖游戲

    Opencv開發(fā)實現(xiàn)拼圖游戲

    這篇文章主要為大家詳細介紹了Opencv開發(fā)實現(xiàn)拼圖游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C語言結構體簡單入門講解

    C語言結構體簡單入門講解

    這篇文章主要介紹了C語言結構體簡單入門講解,本文講述了結構體的基本定義和操作,講解了幾個比較實用的函數(shù)和案例,希望對你有所幫助
    2021-06-06
  • C++中STL的常用算法總結

    C++中STL的常用算法總結

    這篇文章主要介紹了C++?STL中一些常見算法的使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • C語言實現(xiàn)井字棋小游戲

    C語言實現(xiàn)井字棋小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)井字棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04

最新評論

铅山县| 涡阳县| 昌平区| 沅陵县| 宣化县| 永清县| 鹰潭市| 淮安市| 汉川市| 揭阳市| 合江县| 霍邱县| 抚宁县| 尼玛县| 施甸县| 美姑县| 亳州市| 淳化县| 邓州市| 临泉县| 睢宁县| 清水县| 隆昌县| 河曲县| 加查县| 辉南县| 封开县| 金华市| 营口市| 竹北市| 西宁市| 攀枝花市| 通河县| 五台县| 鄄城县| 大石桥市| 儋州市| 武山县| 宿州市| 潍坊市| 阳江市|