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

热点内容
android上下拉刷新 浏览:876
centos可执行文件反编译 浏览:834
林清玄pdf 浏览:268
黑马程序员java基础 浏览:283
awss3命令 浏览:358
百度店铺客户订单手机加密 浏览:500
钉钉班群文件夹怎么上传文件 浏览:749
人社app怎么解绑手机 浏览:101
caj文件夹打不开 浏览:475
什么app可以将电量变色 浏览:692
解放出你的解压抖音小游戏 浏览:346
什么方式解压比较好 浏览:267
erp是什么服务器 浏览:186
python中tmp 浏览:25
说明wpf加密过程 浏览:146
java读取list 浏览:704
iis7gzip压缩 浏览:40
有什么安卓机打吃鸡好 浏览:598
三星u盘加密狗 浏览:476
php函数的返回值吗 浏览:589