首页 > 后端开发 > C++ > 正文

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

裘德小鎮的故事
发布: 2025-09-19 16:45:01
原创
940人浏览过
使用extern "C"可解决C++调用C函数时的链接问题,它关闭名称修饰,确保C与C++函数按C规则链接,实现混合编程。

c++中如何调用c语言函数_extern \

在C++项目中调用C语言函数时,由于C++支持函数重载,编译器会对函数名进行名称修饰(name mangling),而C编译器不会。这会导致链接阶段找不到对应的函数符号。为了解决这个问题,C++提供了 extern "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语言方式声明。

豆包AI编程
豆包AI编程

豆包推出的AI编程助手

豆包AI编程 483
查看详情 豆包AI编程

如何让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++++中如何调用C语言函数_extern "C"实现C与C++混合编程的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号