色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

為什么C語言要進行編譯

科技綠洲 ? 來源:指尖動聽知識庫 ? 作者:指尖動聽知識庫 ? 2023-11-24 15:47 ? 次閱讀

為什么我們編寫的C語言要進行編譯?什么是編譯?編譯時發生了什么?

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

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

Part1預處理

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

編譯過程的第一步預就是預處理,預處理結束后會產生一個后綴為(.i)的臨時文件,這一步由預處理器完成。預處理器主要完成以下任務。

1.1 頭文件展開

#include :在系統指定路徑下尋找stdio.h;

#include "stdio.h" :在當前路徑下尋找stdio.h 如果找不到則在系統指定路徑下尋找stdio.h。

1.2 條件編譯

根據不同情況編譯不同代碼、產生不同目標文件的機制,稱為條件編譯。條件編譯是預處理程序的功能,不是編譯器的功能;

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

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

1.3 #define替換

將宏定義的常量或函數進行替換。

Part2編譯

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

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

匯編代碼是一種簡單的英文語言,用于編寫低級指令(在微控制器程序中,我們使用匯編語言)。整個程序代碼由編譯器軟件一次性解析(語法分析),并通過終端窗口告訴我們源代碼中存在的任何語法錯誤或警告。

Part3匯編

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

使用匯編程序將程序集級代碼(.s 文件)轉換為機器可理解的代碼(二進制/十六進制形式)。匯編程序是一個預先編寫的程序,它將匯編代碼轉換為機器代碼。它從程序集代碼文件中獲取基本指令,并將其轉換為特定于計算機類型(稱為目標代碼)的二進制/十六進制代碼;

生成的文件與程序集文件同名,在 DOS 中稱為擴展名為 .obj 的對象文件,在 UNIX 操作系統中擴展名為 .o;

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

圖片
圖2

Part4鏈接

命令:gcc hello.c -o hello

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

如上圖2,顯示了鏈接階段如何工作的示例,我們有一個具有機器級代碼的對象文件,它通過鏈接器傳遞,鏈接器將庫文件與對象文件鏈接以生成可執行文件。

Part5****結論

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

    關注

    68

    文章

    19404

    瀏覽量

    230771
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137422
  • 程序
    +關注

    關注

    117

    文章

    3795

    瀏覽量

    81293
  • 編譯
    +關注

    關注

    0

    文章

    661

    瀏覽量

    32974
收藏 人收藏

    評論

    相關推薦

    幾款C語言編譯器推薦

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

    ubuntu中安裝gcc編譯器并編譯C語言

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

    C語言編譯過程

    C語言編譯鏈接過程要把我們編寫的一個C程序源代碼,轉換成可以在硬件上運行的程序(可執行代碼),需要進行
    發表于 06-25 10:36 ?428次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>編譯</b>過程

    C語言編譯鏈接過程

    ? C語言編譯鏈接過程要把我們編寫的一個C程序源代碼轉換成可以在硬件上運行的程序(可執行代碼),需要進行
    的頭像 發表于 08-21 10:06 ?2671次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>編譯</b>鏈接過程

    C語言編譯

    電子發燒友網站提供《C語言編譯器.exe》資料免費下載
    發表于 01-15 17:45 ?50次下載

    C程序設計教程之如何進行編譯預處理

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

    C語言程序設計教程之如何進行函數與編譯預處理資料概述

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

    既然C編譯器是C語言寫,那么第一個C編譯器是怎樣來的?

    既然C編譯器是C語言寫的,那第一個C編譯器是怎樣來的?
    的頭像 發表于 02-25 15:47 ?3227次閱讀

    編譯原理的角度看C語言如何轉換成匯編語言的?

    編譯原理的角度看C語言是如何轉換成匯編語言的?
    的頭像 發表于 02-25 15:52 ?2703次閱讀
    從<b class='flag-5'>編譯</b>原理的角度看<b class='flag-5'>C</b><b class='flag-5'>語言</b>如何轉換成匯編<b class='flag-5'>語言</b>的?

    linux中編譯c語言的方法

    以上就是linux中如何編譯c語言的詳細內容。
    發表于 06-09 08:58 ?1452次閱讀

    解析C語言編譯過程中所做的工作

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

    常見的C語言編譯器是什么

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

    C語言條件編譯語句and單片機DMA的介紹

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

    C語言中條件編譯詳解

    —般情況下,C語言源程序中的每一行代碼.都要參加編譯。但有時候出于對程序代碼優化的考慮,希望只對其中一部分內容進行編譯。此時就需要在程序中加
    的頭像 發表于 04-14 13:12 ?3137次閱讀

    CA850 Ver.3.20 C語言編譯

    CA850 Ver.3.20 C語言編譯
    發表于 05-04 19:03 ?0次下載
    CA850 Ver.3.20 <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>編譯</b>包
    主站蜘蛛池模板: 国内精品日本久久久久影院 | 精品国产在线国语视频 | 被六个男人躁到一夜同性 | 亚洲 在线 日韩 欧美 | 动漫美女被吸奶 | 69国产精品成人无码视频 | 国产精品一国产精品免费 | 青草影院内射中出高潮-百度 | 久久国产乱子伦免费精品 | 无码乱人伦一区二区亚洲 | 十次啦中文网 | chinese东北夫妻video | 91麻豆国产精品91久久久 | 国产国产乱老熟女视频网站97 | 黄色大片久久 | 奇米精品一区二区三区在线观看 | 午夜福利免费体检区 | 一个人免费视频在线观看高清频道 | 伊人久在线观看视频 | 老师的玉足高跟鞋满足我 | 亚洲精品乱码久久久久久中文字幕 | 亚洲精品一二三区区别在哪 | a一级毛片视频免费看 | 欧美精品一区二区三区四区 | 浪荡女天天不停挨CAO日常视 | 手机毛片免费看 | 国产精品一区二区激情 | 宝贝好紧好爽再搔一点试視頻 | 国产产乱码一二三区别免费 | 在线观看亚洲免费人成网址 | 欧美在线激情 | 97久久精品视频 | YELLOW视频直播在线观看高清 | 日本68xxxxxxxxx老师 | 亚洲精品有码在线观看 | 久久麻豆亚洲AV成人无码国产 | 美女pk精子2小游戏 美女MM131爽爽爽 | 免费人成在线观看视频不卡 | 美女胸被男子强捏视频 | 伊人综合在线22 | 最新亚洲一区二区三区四区 |