導航:首頁 > 源碼編譯 > 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函數怎麼編譯相關的資料

熱點內容
旅遊業程序員 瀏覽:395
區塊鏈第三代加密數字資產 瀏覽:523
把播放清單放在雲伺服器上 瀏覽:869
phpppt下載 瀏覽:300
1929pdf 瀏覽:366
編譯器是終端嗎 瀏覽:521
pdf改b4 瀏覽:380
命令通道 瀏覽:698
pdf去 瀏覽:543
嵌入式編譯器優化 瀏覽:127
不同品牌安卓一鍵換機用什麼軟體 瀏覽:957
二年下冊運演算法則 瀏覽:137
蘭溪兩級壓縮空壓機 瀏覽:137
網頁如何取回伺服器上的文件 瀏覽:96
linuxphp重啟命令行 瀏覽:575
為什麼我的所有app都登錄不了 瀏覽:579
別樣app海淘怎麼樣 瀏覽:513
聯通app扣費是什麼意思 瀏覽:403
android應用程序管理員許可權 瀏覽:85
石家莊十萬程序員 瀏覽:974