導航:首頁 > 源碼編譯 > extern函數怎麼編譯

extern函數怎麼編譯

發布時間:2024-03-26 13:19:45

1. C++ extern 的問題

extern 表示其後面接的變數或者函數"需要導出"或者"是一個外部的變數或函數"。

如果有頭文件已經聲明(採用函數或變數聲明的方式),可以無需該關鍵字

該關鍵字是告知編譯器,其後面的聲明函數或變數來自本文件的外部,最後鏈接的時候再定位。

經典的應用場景在動態庫導出或者外部變數引入。

下面是一個動態庫導出的示例:

extern"C"intdllfunc();//以C函數介面的方式導出函數dllfunc

這樣編譯器在編譯代碼的時候,就會保留dllfunc的名稱信息,方便其他模塊調用此函數

下面是一個外部變數引入的示例:

externintg_total;//g_total是一個外部的整型變數

這樣編譯器在編譯本代碼的時候,並不會立刻定位g_total的實體位置,而是推遲到link階段去解決實體位置問題。

對於函數引用聲明,使用extern和不使用,在語法角度上沒有本質區別。但是使用extern的函數,其名稱信息為保留在生成好的目標文件中,可以被任何第三方使用者看到。

因此,如果不是有意將其作為介面,請不要使用該關鍵字,以免影響模塊的安全性

對於變數,則必須要此關鍵字才能引用外部的變數,否則編譯器會在此文件內聲明一個同樣名稱的變數,並可能引發編譯錯誤(同一名稱空間中存在兩個相同名稱的變數)

2. c語言調用其他文件的函數怎麼編譯

調用函數庫的話用#include<XXX.h>或者#include"XXX.h"區別是你庫文件放在同一個文件夾還是在IDE的安裝目錄下面,如果你庫文件在你工程文件夾裡面用#include<XXX.h>,否則用#include"XXX.h"

如果你說自己寫庫的話是需要兩個宏命令,#ifndef_XXX_H#define_XXX_H,然後你函數名用extern表示

如果你說編譯的話,你應該說的是編譯原理吧,你可以反匯編一下一個編譯好的程序,如果該處編譯了一個其他函數庫的函數,你可以看到程序把參數PUSH到內存後CALL或者LCALL了一個這個函數的地址,這就完成了匯編中調用函數的部分,我記得X86裡面CALL的機器碼是E8H吧,有興趣的話可以自己用反匯編看一下

這個CALL的話就是調用函數的功能

閱讀全文

與extern函數怎麼編譯相關的資料

熱點內容
php函數的返回值嗎 瀏覽:584
國企穩定程序員 瀏覽:325
編程貓如何使用教程視頻 瀏覽:216
安卓遠端網頁如何打日誌 瀏覽:216
壓縮flash大小 瀏覽:991
解壓的玩具教程可愛版 瀏覽:366
哪個求職app比較靠譜 瀏覽:888
java的讀法 瀏覽:59
nod32區域網伺服器地址 瀏覽:1002
數碼科技解壓 瀏覽:235
新網的雲伺服器管理界面復雜嗎 瀏覽:367
無人聲解壓強迫症視頻 瀏覽:571
計算機編譯運行 瀏覽:639
單片機嵌套 瀏覽:988
python字元串中符號 瀏覽:787
python正則表達式貪婪模式 瀏覽:649
愛國精神指的是什麼app 瀏覽:408
壽司解壓系列全集視頻 瀏覽:913
物體三維重建演算法 瀏覽:984
fuli直播app哪個好 瀏覽:918