extern "C" 修饰的函数到底是为了什么呢?
extern "C" 修饰的函数到底是为了什么呢?搜索了下:
extern "C"修饰的变量和函数是按照C语言方式编译和连接的;
extern "C" 是保证全局函数都是c函数,也就是不进行name-mangling处理。
这些作用都是为了实现什么目的呢?
比如要用vc10做一个dll,导出一些函数,这些函数给vc7 vc8 vc9 vc10 这些做的exe用,还要给vs2003 vs2005 vs2008 vs2010的C#语言调用;
这些函数需要用extern "C" 修饰吗??是不是只要用 def文件写EXPORTS就可以了??
还有需要将函数的调用约定指定为 __stdcall吗?
[解决办法]
在c中没有重载,但是在c++有重载啊
提供给其它的语言用,没完过
调用约定不是一定要指定为__stdcall
[解决办法]
其实就是为了在C++中能够调用C的函数
C++有重载,而C没有,编译之后C++中函数名字带有类型
会找C库中的函数
加上extern C 防止编译中函数名字加上类型
[解决办法]
http://tech.163.com/06/0118/09/27O66HCC0009159Q.html
[解决办法]
呵呵,是这样的
[解决办法]
为了在C++中能够调用C的函数
[解决办法]
你的另一个帖子中已经回复你了。
在C++中支持函数重载,这一点与c很不一样,在C++中调用c函数加上extern "c",防止函数被name-mangling,即名字改编了。
不知道lz有没有过这样的经历:当某个函数没有定义,或者lib库没有引用导致一大堆链接错误,而那些函数名字又都是一串符号,这就是C++的name mangling。
[解决办法]
因为不同编译器对名称修饰的规则不一定一样,比如VC,BC,如果你用VC写出来的DLL想直接给BC用的话,可能BC会找不到定义!故为了能在多编译器下通用。所以采用未经修饰的处理方式!在前面加上extern "C"
eg. int add(int a,int b);
VC对他的修改为 _add_int_int
BC对他的修改为 _add_i_i
[解决办法]
学习了~~
[解决办法]
extern修释的函数是在其它的文件中可以调用,并且是默认的。
[解决办法]
调用约定对于其他语言的有什么影响呢???