欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中的編譯與鏈接

 更新時(shí)間:2022年01月24日 16:44:14   作者:一個(gè)熱愛學(xué)習(xí)的深度渣渣  
這篇文章主要介紹了C++中的編譯與鏈接,編譯型語(yǔ)言SHI?c++最大的優(yōu)點(diǎn),相比于Python這種解釋型語(yǔ)言,C++在編譯階段就進(jìn)行了許多處理,在執(zhí)行階段便具有高效性,下面我們就來(lái)詳細(xì)講解該內(nèi)容吧

?前言:

C++有個(gè)最大的特點(diǎn),那便是編譯型語(yǔ)言,相比于Python這種解釋型語(yǔ)言,C++在編譯階段就進(jìn)行了許多處理,在執(zhí)行階段便具有高效性,本篇主要講解C++中的編譯與鏈接;

一、編譯與鏈接模型

1、一開始的C++是一個(gè)簡(jiǎn)單的加工模型,如下圖所示:

這樣會(huì)存在一些問題:

  • 無(wú)法處理大型程序
  • 加工耗時(shí)較長(zhǎng)
  • 即使少量修改,也需要全部重新加工

2、為了解決以上問題,引入了分塊處理的方式:

編譯鏈接模型的好處:

  • 編譯耗資源但一次處理輸入較少
  • 鏈接輸入較多但處理速度快
  • 便于程序修改(只需修改一部分)

在引入分塊處理后,出現(xiàn)了一些常見概念:

①定義與聲明:一個(gè)變量在只需在一個(gè)文件中定義,其他文件可通過聲明該變量;

②頭文件與源文件:由于聲明的變量、函數(shù)過多,可將聲明放在頭文件中,在源文件中引用頭文件加載這些聲明;

③翻譯單元:源文件 + 相關(guān)頭文件(直接/間接)- 應(yīng)忽略的預(yù)處理語(yǔ)句(宏定義不符合條件的);

二、編譯與鏈接流程

下面通過一個(gè)實(shí)際例子,講解程序如何從cpp一步步到可執(zhí)行文件的;

下圖為一個(gè)整體流程圖:

1、預(yù)處理階段:將cpp或c的源程序進(jìn)行處理(頭文件展開等),轉(zhuǎn)換成以i結(jié)尾的翻譯單元文件

g++ -E ./main.cpp -o ./main.i

2、編譯階段:生成編譯后以s為后綴的匯編代碼文件

g++ main.i -S -o main.s

3、匯編階段:將匯編代碼進(jìn)行匯編生成以o為后綴目標(biāo)文件

4、鏈接階段:合并多個(gè)目標(biāo)文件,關(guān)聯(lián)聲明與定義,生成可執(zhí)行程序

以上為系統(tǒng)內(nèi)部具體的實(shí)現(xiàn)操作,我們?cè)趯?shí)際運(yùn)行中可以通過一行命令實(shí)現(xiàn)編譯鏈接:

g++ ./main.cpp -o ./main

注意點(diǎn):在用IDE編譯程序時(shí),往往會(huì)有兩種模式:Debug和Release,Debug在開發(fā)中使用,優(yōu)化較少,Release在最終程序編譯使用,優(yōu)化較多;

三、總結(jié)

  • C++的編譯與鏈接過程是復(fù)雜的,預(yù)處理、編譯與鏈接都可能出錯(cuò),要細(xì)心排除;
  • 編譯可能產(chǎn)生警告、錯(cuò)誤,都要重視;
  • 我個(gè)人的感受,會(huì)遇到一些很奇怪的坑,不管從環(huán)境還是依賴庫(kù),這就需要有耐心不斷嘗試,并且總結(jié)經(jīng)驗(yàn);

到此這篇關(guān)于C++中的編譯與鏈接的文章就介紹到這了,更多相關(guān)C++ 編譯與鏈接內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言中二維數(shù)組作為函數(shù)參數(shù)來(lái)傳遞的三種方法

    C語(yǔ)言中二維數(shù)組作為函數(shù)參數(shù)來(lái)傳遞的三種方法

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中二維數(shù)組作為函數(shù)參數(shù)來(lái)傳遞的三種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • C++標(biāo)準(zhǔn)模板庫(kù)string類的介紹與使用講解

    C++標(biāo)準(zhǔn)模板庫(kù)string類的介紹與使用講解

    今天小編就為大家分享一篇關(guān)于C++標(biāo)準(zhǔn)模板庫(kù)string類的介紹與使用講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 變量定義與聲明的區(qū)別詳細(xì)解析

    變量定義與聲明的區(qū)別詳細(xì)解析

    外部變量(全局變量)的"定義"與外部變量的"聲明"是不相同的,外部變量的定義只能有一次,它的位置是在所有函數(shù)之外,而同一個(gè)文件中的外部變量聲明可以是多次的,它可以在函數(shù)之內(nèi)(哪個(gè)函數(shù)要用就在那個(gè)函數(shù)中聲明)也可以在函數(shù)之外(在外部變量的定義點(diǎn)之前)
    2013-09-09
  • 基于Qt實(shí)現(xiàn)電子木魚小游戲

    基于Qt實(shí)現(xiàn)電子木魚小游戲

    今年最火爆的解壓小游戲電子木魚,現(xiàn)在許多軟件都上架了這個(gè)小程序。我在網(wǎng)上看了一下基本上都是用py和Java寫的,所以我用QT重新寫了一下,作為小白練手項(xiàng)目非常適合,快跟隨小編一起學(xué)習(xí)一下吧
    2023-01-01
  • fcntl函數(shù)的使用詳解

    fcntl函數(shù)的使用詳解

    本篇文章是對(duì)fcntl函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++鏈接器工作原理詳解

    C++鏈接器工作原理詳解

    當(dāng)文件見過編譯后就需要進(jìn)行一個(gè)鏈接的操作接下來(lái)我們就說(shuō)說(shuō)什么是鏈接,本文給大家介紹了C++鏈接器是如何工作的,文章通過代碼示例和圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • 如何在C++中實(shí)現(xiàn)按位存取

    如何在C++中實(shí)現(xiàn)按位存取

    實(shí)現(xiàn)緊湊存取,不是按一個(gè)字節(jié)一個(gè)字節(jié)地存取,而是按位存取,本文就是介紹了如何在C++中實(shí)現(xiàn)按位存取,需要的朋友可以參考下
    2015-07-07
  • C++實(shí)現(xiàn)LeetCode(86.劃分鏈表)

    C++實(shí)現(xiàn)LeetCode(86.劃分鏈表)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(86.劃分鏈表),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++實(shí)現(xiàn)LeetCode(131.拆分回文串)

    C++實(shí)現(xiàn)LeetCode(131.拆分回文串)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(131.拆分回文串),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 簡(jiǎn)單比較C語(yǔ)言中的execl()函數(shù)與execlp()函數(shù)

    簡(jiǎn)單比較C語(yǔ)言中的execl()函數(shù)與execlp()函數(shù)

    這篇文章主要介紹了C語(yǔ)言中的execl()函數(shù)與execlp()函數(shù)的簡(jiǎn)單比較,是C語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08

最新評(píng)論