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

熱點內容
單片機開發用的軟體 瀏覽:148
程序員8個演算法題 瀏覽:400
php題庫系統 瀏覽:217
王牌戰爭文明重啟選什麼伺服器 瀏覽:650
簡述對稱加密法 瀏覽:653
c語言數學編程 瀏覽:985
F1B命令 瀏覽:629
cs命令快捷鍵 瀏覽:851
阿里雲購買伺服器如何用現金支付 瀏覽:686
pythontime等待 瀏覽:985
單片機串列通信方式 瀏覽:495
android表格demo 瀏覽:275
安卓怎麼讓相冊不顯示網頁 瀏覽:311
php文件系統源碼 瀏覽:723
易信java 瀏覽:497
北侖二級壓縮螺桿機 瀏覽:60
加密路線免費入口 瀏覽:756
計算器程序員是幹嘛的 瀏覽:364
數控編程里fo是啥鍵 瀏覽:672
javacdataxml 瀏覽:960