c++中如何调用C语言函数_extern "C"实现C与C++混合编程

使用extern “C”可解决C++调用C函数时的链接问题,它关闭名称修饰,确保C与C++函数按C规则链接,实现混合编程。

c++中如何调用C语言函数_extern "C"实现C与C++混合编程 机制,用于告诉编译器以C语言的方式处理函数声明和链接。

extern “C” 的作用

extern “C” 的主要作用是关闭C++的名称修饰,使函数按照C语言的规则进行编译和链接。这样,C++代码就能正确调用由C语言实现的函数,也能让C代码调用C++中按C方式导出的函数。

注意: C不支持函数重载,因此用 extern “C” 声明的函数不能被重载。

如何在C++中调用C函数

假设你有一个用C语言编写的函数库,包含头文件 my_c_lib.h 和源文件 my_c_lib.c

立即学习C语言免费学习笔记(深入)”;

my_c_lib.h:

 #ifndef MY_C_LIB_H #define MY_C_LIB_H <p>void hello_from_c(); int add(int a, int b);</p><h1>endif</h1><p>

my_c_lib.c:

 #include "my_c_lib.h" <p>void hello_from_c() { printf("Hello from C!n"); }</p><p>int add(int a, int b) { return a + b; } 

在C++文件中调用这些C函数,需要使用 extern “C” 包裹C头文件的包含:

main.cpp:

 #include <iostream> using namespace std; <p>// 告诉C++编译器:以下函数按C方式链接 extern "C" {</p><h1>include "my_c_lib.h"</h1><p>}</p><p>int main() { hello_from_c(); cout << "3 + 4 = " << add(3, 4) << endl; return 0; } 

说明: 使用 extern “C” { #include “xxx.h” } 可以确保头文件中所有函数都按C语言方式声明。

c++中如何调用C语言函数_extern "C"实现C与C++混合编程

Sitekick

一个AI登陆页面自动构建器

c++中如何调用C语言函数_extern "C"实现C与C++混合编程73

查看详情 c++中如何调用C语言函数_extern "C"实现C与C++混合编程

如何让C代码调用C++函数

反过来,如果想让C语言代码调用C++中实现的函数,也需要使用 extern “C” 来定义该函数,防止名称修饰。

my_cpp_func.cpp:

 extern "C" void hello_from_cpp() {     cout << "Hello from C++!" << endl; } 

然后在C文件中声明并调用:

main.c:

 #include <stdio.h> <p>// 声明为C函数,实际由C++提供 extern void hello_from_cpp();</p><p>int main() { hello_from_cpp(); return 0; } 

注意: 被 extern “C” 修饰的C++函数内部仍可使用C++特性(如new、类、异常等),但函数接口必须符合C语言规范——不能使用重载、引用、命名空间等C不支持的特性。

编译混合程序

编译时需使用C++编译器链接所有目标文件。例如:

 # 编译C文件 gcc -c my_c_lib.c -o my_c_lib.o <h1>编译C++文件</h1><p>g++ -c main.cpp my_cpp_func.cpp -o main.o my_cpp_func.o</p><h1>链接成可执行文件</h1><p>g++ main.o my_c_lib.o my_cpp_func.o -o mixed_program 

关键点: 即使有C文件,最终链接必须用 g++,以确保C++运行时和标准库被正确引入。

基本上就这些。使用 extern “C” 是实现C与C++混合编程的基础手段,理解其原理有助于跨语言模块集成。

c语言 ai c++ ios 标准库 c语言 命名空间 include extern 接口 函数重载

上一篇
下一篇