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

熱點內容
gis伺服器里文件如何處理 瀏覽:827
sec加密數字資產 瀏覽:926
winrar命令行壓縮 瀏覽:788
java成員變數默認 瀏覽:489
解壓神器噴泉視頻 瀏覽:91
現代的語文書是哪裡編譯 瀏覽:108
知乎教孩子學編程 瀏覽:520
vivo加密的應用怎麼解開 瀏覽:918
波形分析演算法 瀏覽:528
php論壇實訓報告 瀏覽:405
java日期字元串轉換成日期 瀏覽:137
linuxsftp連接 瀏覽:936
光伏日發電量演算法 瀏覽:127
小肚皮app怎麼才有vip 瀏覽:618
php全形轉換半形 瀏覽:929
java字元序列 瀏覽:541
杭州編譯分布式存儲區塊鏈 瀏覽:577
材料壓縮曲線 瀏覽:249
linux命令排序 瀏覽:151
手機熱點加密為啥連接不上電腦 瀏覽:981