讲师中心 微信公众号
AI工具推荐 视频效率加速

C++怎么调用C语言的函数_C++与C语言互操作方法

小磊小哥_3826

小磊小哥_3826

发布时间:2025-11-18 20:07:19

|

897人浏览过

|

来源于php中文网

原创

使用extern "C"解决C++调用C函数时的名字修饰问题,通过在C++中声明extern "C"或在头文件中使用条件编译#ifdef __cplusplus,确保C函数按C语言链接方式被正确调用。

c++怎么调用c语言的函数_c++与c语言互操作方法

在C++中调用C语言的函数,关键在于解决C++编译器对函数名的名字修饰(name mangling)问题。C++支持函数重载,因此编译时会将函数参数类型等信息编码进函数名,而C语言没有这一机制,函数名保持原样。如果不做处理,C++链接器就找不到对应的C函数符号。

使用 extern "C" 声明C函数

最常用的方法是在C++代码中用 extern "C" 包裹C函数的声明,告诉编译器这部分函数应按照C语言的方式进行链接。

假设有一个C语言写的函数:

// math_utils.c #include int add(int a, int b) { return a + b; } // math_utils.h #ifndef MATH_UTILS_H #define MATH_UTILS_H int add(int a, int b); #endif

在C++文件中调用它:

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

// main.cpp #include extern "C" { #include "math_utils.h" } int main() { std::cout

注意:把 #include 放在 extern "C" 的花括号内,可以确保头文件中的所有函数声明都以C方式链接。

Livestream Script Generator
Livestream Script Generator

直播带货脚本:话术、节奏、互动、促单。适用于主播、电商运营、MCN机构。

下载

编写兼容C和C++的头文件

如果你开发的是一个既可能被C也可能被C++引用的库,可以在头文件中加入条件编译,让其自动适配:

#ifndef MATH_UTILS_H #define MATH_UTILS_H #ifdef __cplusplus extern "C" { #endif int add(int a, int b); #ifdef __cplusplus } #endif #endif

这样,当这个头文件被C++编译器包含时,会自动加上 extern "C";被C编译器包含时则忽略这部分,避免语法错误。

链接C目标文件

编译时需要确保C源文件被正确编译为对象文件,并与C++代码一起链接。例如:

  • gcc -c math_utils.c -o math_utils.o
  • g++ main.cpp math_utils.o -o program

大多数现代构建系统(如Make、CMake)都能自动处理这种混合编译。

常见问题与注意事项

以下几点容易出错,需特别注意:

  • C++中不能用 extern "C" 声明重载函数,因为C不支持重载。
  • 确保C函数的原型在C++中完全一致,包括参数类型和返回类型。
  • 如果C++中传递了类对象给C函数,需保证接口使用C兼容的数据类型(如基本类型、结构体指针等)。
  • 全局变量也可以用 extern "C" 引用C中定义的变量。

基本上就这些。只要用好 extern "C" 和条件编译,C++调用C函数就很简单,这也是很多系统级库(如SQLite、OpenSSL)能被C++项目直接使用的原因。

热门AI工具

更多
Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3331

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

554

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

562

2026.02.12

typedef和define区别
typedef和define区别

typedef和define区别在类型检查、作用范围、可读性、错误处理和内存占用等。本专题为大家提供typedef和define相关的文章、下载、课程内容,供大家免费下载体验。

313

2023.09.26

define的用法
define的用法

define用法:1、定义常量;2、定义函数宏:3、定义条件编译;4、定义多行宏。更多关于define的用法的内容,大家可以阅读本专题下的文章。

619

2023.10.11

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

5045

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

2130

2025.09.18

c++ 全局变量
c++ 全局变量

本专题整合了c++全局变量的使用、定义、作用域等等内容,阅读专题下面的文章了解更多详细内容。

199

2026.03.17

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Reference
C++ Reference

共0课时 | 0人学习

RabbitMQ 教程手册
RabbitMQ 教程手册

共0课时 | 0人学习

C# 教程
C# 教程

共94课时 | 22.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn