C++中externC和export⽤法
extern "C":
extern "C"的主要作⽤就是为了能够正确实现C++代码调⽤其他C语⾔代码。加上extern "C"后,会指⽰编译器这部分代码按C语⾔的进⾏编译,⽽不是
C++的。由于C++⽀持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,⽽不仅仅是函数名;⽽C语⾔并不⽀持函数重载,因此编译C语⾔代码的函数时不会带上函数的参数类型,⼀般之包括函数名。
extern "C"⼀般修饰变量、函数或者⼀段代码:
被extern "C"限定的函数或变量是extern类型的;
在C++中引⽤C语⾔中的函数和变量,在包含C语⾔头⽂件(假设为cExample.h)时,需进⾏下列处理:
c语言struct头文件extern "C"
{
#include "cExample.h"
}
export:
为了访问其他编译单元(如另⼀代码⽂件)中的变量或对象,对普通类型(包括基本数据类、结构和类),可以利⽤关键字extern,来使⽤这些变量或对象时;但是对模板类型,则必须在定义这些模板类对象和模板函数时,使⽤标准C++新增加的关键字export(导出/出⼝/输出)。例如:
extern int n;
extern struct Point p;
extern class A a;
export template<class T> class Stack<int> s;
export template<class T> void f (T& t) {……}
⼀般是在头⽂件中给出类的定义或全局函数的声明信息,⽽在代码⽂件中给出具体的(类成员函数或
全局函数的)函数定义。然后在多个⽤户代码⽂件中包含该头⽂件后,就可以使⽤其中定义或声明的类和函数。头⽂件中⼀般不包含变量、结构和类对象的定义,因为这样可能会导致重复定义的编译错误。解决办法是,在某个代码⽂件中进⾏定义,在其他⽤户代码⽂件中⽤extern来引⽤它们。
但是对模板类型,则可以在头⽂件中,声明模板类和模板函数;在代码⽂件中,使⽤关键字export来定义具体的模板类对象和模板函数;然后在其他⽤户代码⽂件中,包含声明头⽂件后,就可以使⽤该这些对象和函数了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论