如果 C++程序要调用已经被编译后的C 函数,该怎么办?extern "C"
2011-10-14 11:12
543 查看
假设某个C 函数的声明如下:
void foo(int x, int y);
该函数被C 编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int
之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能
直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。
例如:
extern “C”
{
void foo(int x, int y);
⋯ // 其它函数
}
或者写成
extern “C”
{
#include “myheader.h”
⋯ // 其它C 头文件
}
这就告诉C++编译译器,函数foo 是个C 连接,应该到库中找名字_foo 而不是找
_foo_int_int。C++编译器开发商已经对C 标准库的头文件作了extern“C”处理,所以
我们可以用#include 直接引用这些头文件。
void foo(int x, int y);
该函数被C 编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int
之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能
直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。
例如:
extern “C”
{
void foo(int x, int y);
⋯ // 其它函数
}
或者写成
extern “C”
{
#include “myheader.h”
⋯ // 其它C 头文件
}
这就告诉C++编译译器,函数foo 是个C 连接,应该到库中找名字_foo 而不是找
_foo_int_int。C++编译器开发商已经对C 标准库的头文件作了extern“C”处理,所以
我们可以用#include 直接引用这些头文件。
相关文章推荐
- 如果C++程序要调用已经被编译后的C函数,需要extern “C”
- Why? 在C++中调用被C编译后的函数,要在声明的前面加extern "C"
- c++程序调用被C编译器编译后的函数为什么要加extern "C"
- 如果C++程序要调用已经被编译后的C函数,该怎么办?
- 如果C++程序要调用已经被编译后的C函数,该怎么办?
- 如果C++程序要调用已经被编译后的C函数,该怎么办?
- 为什么在C++里调用被C编译器编译的函数,要加extern "c"
- 转载--在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
- 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”
- 考试题:在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明
- 在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”?
- 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
- 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?----转
- C++调用被C编译器编译过的函数要加extern "C"(转自http://zhidao.baidu.com/question/193713666.html)
- 为什么c++程序调用c编译器编译的函数需要在调用前加上extern“C”
- C++函数重载实现的原理以及为什么在C++中调用C语言编译的函数时要加上extern "C"声明
- C/C++中函数的调用约定(__cdecl, __stdcall)以及extern, extern “C"的详细解释
- 在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern
- 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
- 在C++ 程序中调用被C编译器编译后的函数,为什么要加extern “C”?