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

c語言實(shí)現(xiàn)從源文件從文本到可執(zhí)行文件經(jīng)歷的過程

 更新時(shí)間:2022年07月25日 08:46:43   作者:CW96  
這篇文章主要介紹了c語言實(shí)現(xiàn)從源文件從文本到可執(zhí)行文件經(jīng)歷的過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

源文件從文本到可執(zhí)行文件經(jīng)歷的過程

從 .c文件到 .exe文件

gcc hello.c -o hello.exe

源文件( -E)  預(yù)處理文件 (-S) 匯編文件 (-c) 目標(biāo)文件 ( 無)可執(zhí)行文件

hello.c--預(yù)處理--hello.i--編譯--hello.s---匯編--hello.o--鏈接--hello.exe

預(yù)處理

gcc -E hello.c -o hello.i

1.頭文件展開 —不檢查語法錯(cuò)誤,可以展開任意文件

2.宏定義—將宏名替換為宏值,不檢查語法錯(cuò)誤

3.替換注釋—變成空行

4.展開條件編譯—根據(jù)條件來展開指令

編譯

gcc -S hello.i -o hello.s

1.將c程序翻譯為匯編指令

2.逐行檢查語法錯(cuò)誤–整個(gè)編譯4步中最耗時(shí)間的過程

匯編

gcc -c hello.s -o hello.o

1.將匯編指令翻譯成對(duì)應(yīng)的二進(jìn)制編碼

鏈接

gcc hello.o -o hello.exe

1.數(shù)據(jù)段合并

2.數(shù)據(jù)地址回填

3.庫引入

在這里插入圖片描述

寄存器、緩存、內(nèi)存三者關(guān)系

cpu計(jì)算時(shí),先預(yù)先把要用的數(shù)據(jù)從硬盤督導(dǎo)內(nèi)存,然后再把即將要用的數(shù)據(jù)讀到寄存器中。緩存能夠提高數(shù)據(jù)的讀取速度。

集成開發(fā)環(huán)境 IDE

用于提供程序開發(fā)的應(yīng)用程序,一般包括編輯器、編譯器、調(diào)試器和用戶界面工具。

源程序如何到可執(zhí)行程序

源程序(源代碼)是指按照一定的程序設(shè)計(jì)語言規(guī)范編寫的未經(jīng)過編譯的文本文件,是具有可讀性的計(jì)算機(jī)語言指令??梢员茸髯约菏謱懙某绦虼a。

可執(zhí)行程序(Executable Program,EXE file)是可以在操作系統(tǒng)存儲(chǔ)空間中浮動(dòng)定位的二進(jìn)制可執(zhí)行程序。一般軟件安裝后會(huì)生成可執(zhí)行文件,可以直接加載到內(nèi)存中,并又操作系統(tǒng)加載并執(zhí)行。

以 C 語言為例,自己編寫的源代碼文件擴(kuò)展名為 c,這個(gè) c 文件就是源文件。

從源文件到可執(zhí)行文件一般需要經(jīng)過幾個(gè)步驟:預(yù)處理->編譯->匯編->鏈接這四個(gè)過程。

  • 預(yù)處理:預(yù)處理相當(dāng)于根據(jù)預(yù)處理命令將源代碼轉(zhuǎn)換為新的 c 程序,不過通常以 i 為擴(kuò)展名。
  • 編譯:將得到的 i 文件翻譯成匯編代碼,通常以 s 為擴(kuò)展名。
  • 匯編:將匯編文件翻譯為機(jī)器指令,并打包成可重定位目標(biāo)程序的 o 文件。
  • 鏈接:將引用的其它 o 文件加到匯編后的 o 文件中,處理后得到最終的可執(zhí)行文件。

這里首先在 linux 操作系統(tǒng)中編寫源代碼,并命名為 hello.c,內(nèi)容如下:

#include <stdio.h>
int main()
{
? ? printf("Hello world!\n");
? ? return 0;
}

一個(gè)很簡單的源代碼,但是這樣的源代碼如果不是在集成開發(fā)環(huán)境(Integrated Development Environment,IDE)中是不能夠直接點(diǎn)擊執(zhí)行的,需要經(jīng)過一系列的操作,具體為:

# 預(yù)處理
gcc -E hello.c -o hello.i
# 編譯
gcc -S hello.i -o hello.s
# 匯編
gcc -c hello.s -o hello.o
# 鏈接
gcc hello.o -o hello

經(jīng)過以下操作后,就能夠發(fā)現(xiàn)在 hello.c 文件同級(jí)目錄中出現(xiàn)了文件 hello.i,hello.s,hello.o,hello。可知文件 hello 即為可執(zhí)行程序,我們?cè)诮K端中輸入下方的指令,就能夠看到最后的輸出結(jié)果。

./hello

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Qt實(shí)現(xiàn)給窗口繪制陰影的示例代碼

    Qt實(shí)現(xiàn)給窗口繪制陰影的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)給窗口繪制陰影的方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Qt有一定的幫助,感興趣的可以了解一下
    2022-11-11
  • C 語言基礎(chǔ)之C 語言三大語句注意事項(xiàng)

    C 語言基礎(chǔ)之C 語言三大語句注意事項(xiàng)

    今天講解的內(nèi)容,則是自己對(duì)于這三種語句一些細(xì)節(jié)的簡單介紹,分支語句:if,switch、循環(huán)語句:while,for,do while、goto語句,感興趣的小伙伴可以參考下面具體的文章內(nèi)容
    2021-09-09
  • C語言中讀寫交替時(shí)出現(xiàn)的問題分析

    C語言中讀寫交替時(shí)出現(xiàn)的問題分析

    讀寫命令交替,一定要使用fseek重新定位,否則出現(xiàn)輸入顯示混亂,這篇文章主要介紹了C語言中讀寫交替時(shí)出現(xiàn)的問題分析,需要的朋友可以參考下
    2022-12-12
  • C++基本用法實(shí)踐之移動(dòng)語義詳解

    C++基本用法實(shí)踐之移動(dòng)語義詳解

    移動(dòng)(move)語義是C++引入了一種新的內(nèi)存優(yōu)化,以避免不必要的拷貝,下面小編就來和大家簡單聊聊C++中移動(dòng)語義的相關(guān)使用吧,希望對(duì)大家有所幫助
    2023-07-07
  • C++日期與時(shí)間 chrono庫介紹及使用教程

    C++日期與時(shí)間 chrono庫介紹及使用教程

    chrono庫是C++11中的一個(gè)標(biāo)準(zhǔn)庫,它提供了一系列與時(shí)間相關(guān)的類和函數(shù),用于表示和處理時(shí)間間隔,時(shí)鐘和時(shí)間點(diǎn),C++20新增Calendar,這篇文章主要介紹了C++日期與時(shí)間 chrono庫介紹及使用,需要的朋友可以參考下
    2023-12-12
  • C++ 約瑟夫環(huán)問題案例詳解

    C++ 約瑟夫環(huán)問題案例詳解

    這篇文章主要介紹了C++ 約瑟夫環(huán)問題案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言實(shí)現(xiàn)放煙花的程序

    C語言實(shí)現(xiàn)放煙花的程序

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)放煙花的程序,有音樂播放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • C++ Boost Chrono實(shí)現(xiàn)計(jì)時(shí)碼表流程詳解

    C++ Boost Chrono實(shí)現(xiàn)計(jì)時(shí)碼表流程詳解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • C語言 表、棧和隊(duì)列詳解及實(shí)例代碼

    C語言 表、棧和隊(duì)列詳解及實(shí)例代碼

    這篇文章主要介紹了C語言 表、棧和隊(duì)列詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • C++實(shí)現(xiàn)圖書管理系統(tǒng)最新版

    C++實(shí)現(xiàn)圖書管理系統(tǒng)最新版

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)圖書管理系統(tǒng)最新版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評(píng)論

芜湖县| 光泽县| 明溪县| 大邑县| 阿瓦提县| 南安市| 娱乐| 平昌县| 磴口县| 茌平县| 老河口市| 珠海市| 安仁县| 务川| 额济纳旗| 安宁市| 苍南县| 金阳县| 察雅县| 盐山县| 洮南市| 安图县| 四子王旗| 盱眙县| 绥滨县| 苏尼特左旗| 玉田县| 聂拉木县| 凤城市| 建始县| 云和县| 墨江| 兴海县| 广州市| 克拉玛依市| 新营市| 河池市| 景谷| 竹溪县| 滦平县| 涡阳县|