C++程序调用已经被编译后的C函数
2013-03-09 08:39
267 查看
来自林锐的《高质量C++编程指南》答案:
如果C++程序要调用已经被编译后的C 函数,该怎么办?
假设某个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 直接引用这些头文件。
如果C++程序要调用已经被编译后的C 函数,该怎么办?
假设某个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 直接引用这些头文件。
相关文章推荐
- 如果C++程序要调用已经被编译后的C函数,该怎么办?
- 如果C++程序要调用已经被编译后的C函数,该怎么办?
- 如果C++程序要调用已经被编译后的C函数,该怎么办?
- C++程序调用已经被编译后的C函数
- 如果C++程序要调用已经被编译后的C函数,需要extern “C”
- 如果 C++程序要调用已经被编译后的C 函数,该怎么办?extern "C"
- 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
- c++程序调用被C编译器编译后的函数为什么要加extern "C"
- linux下如何将c++程序编译成so,如何调用该so文件
- 经典面试题目--在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
- 在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”?
- c++程序调用c函数 and otherwise zz
- C++程序调用C函数
- (二)一个工作任务引起的乱战——C++程序编译为dll,让C#调用
- 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
- 在VS2008中编译纯c/c++程序并由c#调用过程
- 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
- 为什么c++程序调用c编译器编译的函数需要在调用前加上extern“C”
- 在C++ 程序中调用被 C 编译器编译后的函数库,为什么要加 extern “C”声明?
- 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?