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

热点内容
linux升级kernel 浏览:174
入侵服务器挖矿是什么罪 浏览:44
房屋解压资料丢了怎么办 浏览:806
java文件行读写 浏览:544
影城网上售票系统源码 浏览:634
防疫就是命令歌曲 浏览:204
滴滴号码加密怎么解除 浏览:844
模具编程的职责 浏览:944
华为ssh改加密算法 浏览:149
文件夹空白合同 浏览:763
pythonwebpy开发 浏览:671
不是c编译器的有 浏览:662
win10压缩包下载 浏览:905
逆战手机app怎么样 浏览:948
自嗨自我解压图片 浏览:397
电子书导入kindle哪个文件夹 浏览:420
pythontcpserver性能 浏览:546
linux文件夹改名 浏览:566
单片机开发板是什么 浏览:853
阿里云服务器不能截屏 浏览:868