导航:首页 > 源码编译 > 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函数怎么编译相关的资料

热点内容
单片机串口发射怎么回事 浏览:472
程序员假装自己很忙 浏览:798
程序员能力关键词 浏览:615
plc编程高级视频教程 浏览:610
java递归求n 浏览:84
python绝对路径导入 浏览:126
nex5g加密 浏览:975
18的空岛服务器地址 浏览:86
程序员要学什么硬件 浏览:666
股票涨跌源码怎么看 浏览:576
加密软件做法 浏览:57
美国程序员有多少中国人 浏览:741
人民日报app里怎么看新闻早班车 浏览:587
忘了app怎么办 浏览:531
如何用云服务器做云平台 浏览:301
非箍筋加密区剪力 浏览:119
利联科技服务器卡怎么办 浏览:386
js和python哪个好 浏览:463
c盘的哪些文件夹没用 浏览:83
文件为什么会超出在线解压限制 浏览:591