在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么C語(yǔ)言要進(jìn)行編譯

科技綠洲 ? 來源:指尖動(dòng)聽知識(shí)庫(kù) ? 作者:指尖動(dòng)聽知識(shí)庫(kù) ? 2023-11-24 15:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

為什么我們編寫的C語(yǔ)言要進(jìn)行編譯?什么是編譯?編譯時(shí)發(fā)生了什么?

機(jī)器無法理解我們編寫的C語(yǔ)言,而編譯就是將面向人類的高級(jí)語(yǔ)言轉(zhuǎn)換成為面向機(jī)器的機(jī)器語(yǔ)言的過程,圖1是GCC編譯器進(jìn)行編譯的過程,編譯時(shí)主要分為了4個(gè)階段,每個(gè)階段的具體作用將在接下來進(jìn)行介紹。

注:預(yù)處理中的cpp不是 c plus plus,而是c pre-process

Part1預(yù)處理

命令:gcc -E hello.c -o hello.i

編譯過程的第一步預(yù)就是預(yù)處理,預(yù)處理結(jié)束后會(huì)產(chǎn)生一個(gè)后綴為(.i)的臨時(shí)文件,這一步由預(yù)處理器完成。預(yù)處理器主要完成以下任務(wù)。

1.1 頭文件展開

#include :在系統(tǒng)指定路徑下尋找stdio.h;

#include "stdio.h" :在當(dāng)前路徑下尋找stdio.h 如果找不到則在系統(tǒng)指定路徑下尋找stdio.h。

1.2 條件編譯

根據(jù)不同情況編譯不同代碼、產(chǎn)生不同目標(biāo)文件的機(jī)制,稱為條件編譯。條件編譯是預(yù)處理程序的功能,不是編譯器的功能;

這些操作都是在預(yù)處理階段完成的,多余的代碼以及所有的宏都不會(huì)參與編譯,不僅保證了代碼的正確性,還減小了編譯后文件的體積;

條件編譯主要處理內(nèi)容為:#if,#ifdef,#ifndef, #if defined(AAA), #if defined AAA。

1.3 #define替換

將宏定義的常量或函數(shù)進(jìn)行替換。

Part2編譯

命令:gcc -S hello.c -o hello.s

C 中的編譯階段使用內(nèi)置編譯器軟件將 (.i) 臨時(shí)文件轉(zhuǎn)換為具有匯編級(jí)指令(低級(jí)代碼)的匯編文件 (.s)。為了提高程序的性能,編譯器將中間文件轉(zhuǎn)換為程序集文件;

匯編代碼是一種簡(jiǎn)單的英文語(yǔ)言,用于編寫低級(jí)指令(在微控制器程序中,我們使用匯編語(yǔ)言)。整個(gè)程序代碼由編譯器軟件一次性解析(語(yǔ)法分析),并通過終端窗口告訴我們?cè)创a中存在的任何語(yǔ)法錯(cuò)誤或警告。

Part3匯編

命令:gcc -c hello.c -o hello.o。

使用匯編程序?qū)⒊绦蚣?jí)代碼(.s 文件)轉(zhuǎn)換為機(jī)器可理解的代碼(二進(jìn)制/十六進(jìn)制形式)。匯編程序是一個(gè)預(yù)先編寫的程序,它將匯編代碼轉(zhuǎn)換為機(jī)器代碼。它從程序集代碼文件中獲取基本指令,并將其轉(zhuǎn)換為特定于計(jì)算機(jī)類型(稱為目標(biāo)代碼)的二進(jìn)制/十六進(jìn)制代碼;

生成的文件與程序集文件同名,在 DOS 中稱為擴(kuò)展名為 .obj 的對(duì)象文件,在 UNIX 操作系統(tǒng)中擴(kuò)展名為 .o;

如圖2顯示了組裝階段如何工作的示例。程序集文件 hello.s 將轉(zhuǎn)換為具有相同名稱但擴(kuò)展名不同的對(duì)象文件 hello.o。

圖片
圖2

Part4鏈接

命令:gcc hello.c -o hello

鏈接是將庫(kù)文件包含在我們的程序中的過程。庫(kù)文件是一些預(yù)定義的文件,其中包含機(jī)器語(yǔ)言中的函數(shù)定義,這些文件的擴(kuò)展名為.lib。一些未知語(yǔ)句寫入我們的操作系統(tǒng)無法理解的對(duì)象 (.o/.obj) 文件中。你可以把它理解為一本書,里面有一些你不知道的單詞,你會(huì)用字典來找到這些單詞的含義。同樣,我們使用庫(kù)文件來為對(duì)象文件中的一些未知語(yǔ)句賦予意義。鏈接過程會(huì)生成一個(gè)可執(zhí)行文件,其擴(kuò)展名為 .exe 在 DOS 中為 .out,在 UNIX 操作系統(tǒng)中為 .out;

如上圖2,顯示了鏈接階段如何工作的示例,我們有一個(gè)具有機(jī)器級(jí)代碼的對(duì)象文件,它通過鏈接器傳遞,鏈接器將庫(kù)文件與對(duì)象文件鏈接以生成可執(zhí)行文件。

Part5****結(jié)論

  • C中的編譯過程也稱為將人類可理解代碼(C程序)轉(zhuǎn)換為機(jī)器可理解代碼(二進(jìn)制代碼)的過程;
  • C語(yǔ)言的編譯過程包括四個(gè)步驟:預(yù)處理、編譯、匯編和鏈接;
  • 預(yù)處理器執(zhí)行刪除注釋、宏擴(kuò)展、文件包含。這些命令在編譯過程的第一步執(zhí)行;
  • 編譯器可以提高程序的性能,并將中間文件轉(zhuǎn)換為匯編文件;
  • 匯編程序有助于將匯編文件轉(zhuǎn)換為包含機(jī)器代碼的對(duì)象文件;
  • 鏈接器用于將庫(kù)文件與對(duì)象文件鏈接。這是編譯中生成可執(zhí)行文件的最后一步。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19858

    瀏覽量

    234328
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7631

    瀏覽量

    141055
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3825

    瀏覽量

    82726
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    676

    瀏覽量

    33881
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    幾款C語(yǔ)言編譯器推薦

    一些剛開始接觸C語(yǔ)言編譯的網(wǎng)友想下載一款C語(yǔ)言編譯器來使用,不過,網(wǎng)絡(luò)上有不少
    發(fā)表于 09-05 09:19 ?1.1w次閱讀

    ubuntu中安裝gcc編譯器并編譯C語(yǔ)言

    對(duì)于習(xí)慣了使用windows進(jìn)行開發(fā)的朋友們,如果想要編譯C語(yǔ)言,只要要在windows中安裝一個(gè)可以編譯的IDE即可。或者直接自己加載
    發(fā)表于 01-11 15:50 ?5373次閱讀
    ubuntu中安裝gcc<b class='flag-5'>編譯</b>器并<b class='flag-5'>編譯</b><b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>

    C語(yǔ)言編譯過程

    C語(yǔ)言編譯鏈接過程要把我們編寫的一個(gè)C程序源代碼,轉(zhuǎn)換成可以在硬件上運(yùn)行的程序(可執(zhí)行代碼),需要進(jìn)行
    發(fā)表于 06-25 10:36 ?562次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>的<b class='flag-5'>編譯</b>過程

    C語(yǔ)言編譯鏈接過程

    ? C語(yǔ)言編譯鏈接過程要把我們編寫的一個(gè)C程序源代碼轉(zhuǎn)換成可以在硬件上運(yùn)行的程序(可執(zhí)行代碼),需要進(jìn)行
    的頭像 發(fā)表于 08-21 10:06 ?3077次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>的<b class='flag-5'>編譯</b>鏈接過程

    C語(yǔ)言編譯

    電子發(fā)燒友網(wǎng)站提供《C語(yǔ)言編譯器.exe》資料免費(fèi)下載
    發(fā)表于 01-15 17:45 ?51次下載

    C程序設(shè)計(jì)教程之如何進(jìn)行編譯預(yù)處理

    預(yù)處理是 C 語(yǔ)言的一個(gè)重要功能,它由預(yù)處理程序負(fù)責(zé)完成。所謂預(yù)處理是指在進(jìn)行編譯的第一遍掃描(詞法掃描和語(yǔ)法分析)之前所作的工作。當(dāng)對(duì)一個(gè)源文件進(jìn)
    發(fā)表于 11-02 15:47 ?5次下載

    C語(yǔ)言程序設(shè)計(jì)教程之如何進(jìn)行函數(shù)與編譯預(yù)處理資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言程序設(shè)計(jì)教程之如何進(jìn)行函數(shù)與編譯預(yù)處理資料概述主要內(nèi)容包括了:1 函數(shù)概述2 函數(shù)定義與調(diào)用3 局部變量和全局變量4 變量的生存期和存儲(chǔ)類別5
    發(fā)表于 12-10 17:16 ?4次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>程序設(shè)計(jì)教程之如何<b class='flag-5'>進(jìn)行</b>函數(shù)與<b class='flag-5'>編譯</b>預(yù)處理資料概述

    既然C編譯器是C語(yǔ)言寫,那么第一個(gè)C編譯器是怎樣來的?

    既然C編譯器是C語(yǔ)言寫的,那第一個(gè)C編譯器是怎樣來的?
    的頭像 發(fā)表于 02-25 15:47 ?3461次閱讀

    編譯原理的角度看C語(yǔ)言如何轉(zhuǎn)換成匯編語(yǔ)言的?

    編譯原理的角度看C語(yǔ)言是如何轉(zhuǎn)換成匯編語(yǔ)言的?
    的頭像 發(fā)表于 02-25 15:52 ?3000次閱讀
    從<b class='flag-5'>編譯</b>原理的角度看<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>如何轉(zhuǎn)換成匯編<b class='flag-5'>語(yǔ)言</b>的?

    linux中編譯c語(yǔ)言的方法

    以上就是linux中如何編譯c語(yǔ)言的詳細(xì)內(nèi)容。
    發(fā)表于 06-09 08:58 ?1566次閱讀

    解析C語(yǔ)言編譯過程中所做的工作

    C語(yǔ)言編譯鏈接過程要把我們編寫的一個(gè)C程序源代碼,轉(zhuǎn)換成可以在硬件上運(yùn)行的程序(可執(zhí)行代碼),需要進(jìn)行
    的頭像 發(fā)表于 06-27 10:21 ?3559次閱讀
    解析<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>編譯</b>過程中所做的工作

    常見的C語(yǔ)言編譯器是什么

    常見的C語(yǔ)言編譯器是什么?大家一般都用的是什么軟件呢?
    的頭像 發(fā)表于 10-04 18:04 ?6502次閱讀

    C語(yǔ)言條件編譯語(yǔ)句and單片機(jī)DMA的介紹

    C語(yǔ)言條件編譯語(yǔ)句and單片機(jī)DMA的介紹C語(yǔ)言條件編譯:這里面介紹的很詳細(xì),也有歷程。DMA的
    發(fā)表于 11-29 10:36 ?3次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>條件<b class='flag-5'>編譯</b>語(yǔ)句and單片機(jī)DMA的介紹

    C語(yǔ)言中條件編譯詳解

    —般情況下,C語(yǔ)言源程序中的每一行代碼.都要參加編譯。但有時(shí)候出于對(duì)程序代碼優(yōu)化的考慮,希望只對(duì)其中一部分內(nèi)容進(jìn)行編譯。此時(shí)就需要在程序中加
    的頭像 發(fā)表于 04-14 13:12 ?3416次閱讀

    CA850 Ver.3.20 C語(yǔ)言編譯

    CA850 Ver.3.20 C語(yǔ)言編譯
    發(fā)表于 05-04 19:03 ?0次下載
    CA850 Ver.3.20 <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>編譯</b>包
    主站蜘蛛池模板: 乱人伦小说短篇 | 六月丁香婷婷综合 | 看毛片网 | 亚洲五月综合缴情婷婷 | 天天噜天天干 | 日本特黄特色aaa大片免费欧 | 四虎最新网 | 四虎影院观看 | 最新丁香六月 | 好吊色7777sao在线视频观看 | 三级色图 | 免费在线公开视频 | 免费看曰批女人爽的视频网址 | 免费aa视频| 亚色影视 | 尤物黄色 | 五月婷婷色综合 | 视频1区| 女人张腿让男子桶免费动态图 | 欧美性三级 | 在线观看免费黄视频 | 波多野结衣50连精喷在线 | 天天操夜夜操美女 | 亚洲国产成人精品不卡青青草原 | 日韩一级黄色录像 | 瑟瑟久久| 免费高清一级欧美片在线观看 | 三区在线观看 | 成人欧美一区二区三区黑人3p | 91福利免费视频 | 久久综合九色综合欧美播 | 欧美一区二区三区四区视频 | 久久久久毛片成人精品 | 黄色毛片播放 | 深夜国产成人福利在线观看女同 | 三级第一页 | 色天天躁夜夜躁天干天干 | 国产91小视频在线观看 | 亚洲无线码一区在线观看 | 黑人破乌克兰美女处 | 色天使在线观看 |