【来源】:http://blog.myspace.cn/e/400991786.htm
主要是为了解决C++中函数可以重载这个特性,详细原因如下:函数经过编译系统的翻译成汇编,函数名对应着汇编标号。因为C编译函数名与得到的汇编代号基本一样,如:fun()=>_fun,
main=>_main但是C++中函数名与得到的汇编代号有比较大的差别。如:由于函数重载,函数名一样,但汇编代号绝对不能一样。为了区分,编译器会把函数名和参数类型合在一起作为汇编代号,这样就解决了重载问题。具体如何把函数名和参数类型合在一起,要看编译器的帮助说明了。这样一来,如果C++调用C,如fun(),则调用名就不是C的翻译结果_fun,而是带有参数信息的一个名字,因此就不能调用到fun(),为了解决这个问题,加上extern
"C"表示该函数的调用规则是C的规则,则调用时就不使用C++规则的带有参数信息的名字,而是_fun,从而达到调用C函数的目的。
分享到:
相关推荐
。。。
。。。
2. 什么是“引用”?申明和使用“引用”要注意哪些问题? 4. 在什么时候需要使用“常引用”? 11. 已知strcpy的函数原型:char *strcpy(char...15.在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
(3) 在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明? 答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的...
所以C++中的函数,声明前如果加上extern ”C“, 那么编译器就不会对它做命名修饰,编译出来的代码就可以在C程序中直接调用。 当然在调用之前还是要先声明的。C语言不兼容C++,所以不能直接包含.hpp等C++的头文件。...
/*如果有这两个函数要被调用,在C语言中函数重载是不允许的,那么在C++中为什么可以呢。 C++中就是使用了mangle技术,对函数重载的函数名加上编译器中自定义规则的表示符,编译之后的函数名就会不一样。 例如 func...
我们经常会在C/C++程序中见到extern “C”,这是一个很重要的概念...反过来,.cpp文件中定义的函数,.c文件要调用,则同样要在.cpp文件中用extern “C”声明,.c文件只用普通的extern声明。 两个源文件分别编译成.o文件
在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明? 答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变 量和函数是按照C语言方式编译和连接的。由于编译后的...
3.15 我要检查一个数是不是在另外两个数之间,为什么if(abc)不行? 3.16 为什么如下的代码不对?inta=1000,b=1000;longintc=a*b; 3.17 为什么下面的代码总是给出0?doubledegC,degF;degC=5.0/9*(degF-32); ...
3.15 我要检查一个数是不是在另外两个数之间,为什么if(a b c)不行? 40 3.16 为什么如下的代码不对?int a=1000, b=1000; long int c=a * b; 40 3.17 为什么下面的代码总是给出0?double degC, degF; degC= ...
o 2.4 extern 在函数声明中是什么意思? o 2.5 关键字 auto 到底有什么用途? o 2.6 我似乎不能成功定义一个链表。我试过 typedef struct { char *item; NODEPTR next; } *NODEPTR; 但是编译器报了错误信息。难道...
3.15 我要检查一个数是不是在另外两个数之间,为什么if(a b c)不行? 3.16 为什么如下的代码不对?int a=1000, b=1000; long int c=a * b; 3.17 为什么下面的代码总是给出0?double degC, degF; degC= 5.0 / 9 * ...
这样一来,如果C++调用C,如fun(),则调用名就不是C的翻译结果_fun, 而是带有参数信息的一个名字,因此就不能调用到fun(),为了解决这个问题,加上extern "C"表示该函数的调用规则是C的规则,则调用时就不使用C++...
2、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”? 答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为: void foo(int x, int...
我们知道C++程序要使用C语言的函数就必须在函数声明前加上extern "C"关键字,这对于静态库和DLL没有什么不同。 但是这个关键字不能直接出现在头文件函数声明中,否则DLL无法通过编译, 原因很简单,C语言并没有...
《c语言教程(原书第4版)》是一本优秀的c程序设计语言教材,完整描述了ansi c语言及其语法特性,并对c语言的高级特性和应用作了深入阐述,介绍了从c到c++和java过渡的相关知识。《c语言教程(原书第4版)》的一个...
一、C#调用C++库 1、创建C++库 打开VisualStudio,创建一个C++工程,输入项目名称...加上extern “C”后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。 #include stdafx.h #include<iostre