找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 3118|回复: 0
打印 上一主题 下一主题
收起左侧

export/import extern 三者之间的区别

[复制链接]
跳转到指定楼层
楼主
ID:105323 发表于 2016-2-24 17:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在C与汇编混合编程中:
IMPORT 符号 {[WEAK]}​

在汇编中,该伪操作指令的作用是告诉编译器,该符号是在外源文件中定义的,​这一点跟extern的作用是一样的,但与extern不同的是不论该符号是否在本源文件中被用到,编译器均将该符号添加到本文件的符号表中。如果在符号后添加了该声明 {[WEAK]}​,则该符号即使在外源文件中没有被找到,编译器也不会报错,否则就会报错。
EXTERN符号 {[WEAK]} [size=17.27272605896px]​ 在汇编中,该符号是在外源文件中定义的,在本源文件中可能被用到,如果没用到,编译器就不会添加到本源文件的符号表中;{[WEAK]} 作用同上。
EXPORT   符号  
在汇编中,对于本源文件中的一个函数,通过EXPORT给这个函数定义一个新的函数的入口,包括名字,地址等,供外面文件(如C源文件)调用。这个函数会被放到kernelimage的__ksymtabsection中,当用到这个函数的模块在runtime时被加载的时候,loader就会从__ksymtabsection解析这个函数。


所以从源文件的角度讲,这就涉及到内部函数与外部函数的问题,在汇编中以IMPORT EXPORT EXTERN来加以声明,告知编译器。IMPORT的意思是该函数或符号是外源文件定义的,在本文件中可能加以引用。EXPORT的意思是该函数或符号​重新定义一个新的函数入口,包括名称和地址,以供外源文件引用。
另:汇编语言的指令不区分大小写,但是函数,符号,字符串等还是区分大小写的;​
在C语言中,也有内部函数与外部函数的区别,格式分别如下:
static 函数类型声明  函数名(形参表);
static int  function(int a,int b); 这是通过static定义了一个内部函数,对外源文件进行屏蔽,尤其是在多人分工编写程序时,即使名字一样,也不会发生冲突,增加了程序的可靠性。
同理,
extern​ int function(int a,int b);就可以为其他源文件调用,如果省略extern,则默认为外部函数。
这是从程序源文件之间的角度来讲,分为内部变量与外部变量、内部函数与外部函数;
那么借此,在从源文件内部的角度来表一表,在某一个源文件中,变量的分类:​
在一个源文件内,从作用域的角度讲:变量分为全局变量局部变量​;从变量的存储方式上讲,又分为静态存储方式动态存储方式,静态存储方式分配的存储空间是固定的,在整个程序运行期间一直占有该内存空间,不释放。动态则是动态分配的,其生命周期结束后,就会是释放,所以根据作用域与存储方式主要分为以下三种变量:静态全局变量静态局部变量局部变量,这里主要强调一下静态局部变量,其他两种都比较好理解,静态局部变量就是让某子函数的局部变量的存储单元固定,不释放,该变量初始化一次后,当再次运行到此函数时,该变量的初始化语句跳过不再执行,该变量依然保持着上一次程序运行时的最后一次的赋值,从这个角度叫,该函数不具备可重入性。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表