乐闻世界logo
搜索文章和话题

Call a C function from C++ code

5 个月前提问
4 个月前修改
浏览次数23

1个答案

1

在C++程序中调用C函数是一个常见的需求,特别是在需要使用已经存在的C代码库的情况下。为了在C++中调用C代码,关键是要确保C++编译器以C的方式来处理C代码,这通常通过使用extern "C"声明来实现。

步骤 1: 准备C函数

首先,我们需要一个C函数。假设我们有一个简单的C函数,用于计算两个整数的和,代码可能如下所示(保存为 math_functions.c):

c
// math_functions.c #include "math_functions.h" int add(int a, int b) { return a + b; }

同时我们需要一个头文件(math_functions.h),以便于C和C++代码都能引用这个函数:

c
// math_functions.h #ifndef MATH_FUNCTIONS_H #define MATH_FUNCTIONS_H #ifdef __cplusplus extern "C" { #endif int add(int a, int b); #ifdef __cplusplus } #endif #endif

步骤 2: 从C++代码中调用C函数

现在我们创建一个C++文件(main.cpp),从其中调用上述C函数:

cpp
// main.cpp #include <iostream> #include "math_functions.h" int main() { int result = add(10, 20); std::cout << "The result of adding 10 and 20 is " << result << std::endl; return 0; }

在这个例子中,extern "C" 告诉C++编译器这段代码是C语言编写的,所以编译器应该以C的编译和链接规则来处理它。这是必须的,因为C++对名字进行修饰(name mangling),而C则不进行,直接使用这个声明可以避免链接时找不到符号的错误。

步骤 3: 编译和链接

你需要使用C和C++编译器分别编译这些代码,然后将它们链接在一起。使用GCC可以这样操作:

bash
gcc -c math_functions.c -o math_functions.o g++ -c main.cpp -o main.o g++ math_functions.o main.o -o main

或者如果你使用单一的命令:

bash
g++ main.cpp math_functions.c -o main

这里,.c 文件会被GCC自动用C编译器处理,而 .cpp 文件则用C++编译器处理。

总结

通过上述方法,你可以在C++程序中无缝地调用C函数。这种技巧特别有用于那些需要整合旧有C库到现代C++项目中的场景。只需确保使用正确的extern "C"声明,并正确地编译与链接不同语言写成的代码模块。

2024年6月29日 12:07 回复

你的答案