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

C++如何调用C语言函数?(extern "C"用法)

裘德小鎮的故事
发布: 2025-12-17 09:14:02
原创
540人浏览过
C++调用C函数需用extern "C"解决名称修饰问题:在头文件中用#ifdef __cplusplus extern "C" { #endif包裹声明,或在C++源文件中用extern "C"包含C头文件/定义函数。

c++如何调用c语言函数?(extern \

在C++中调用C语言函数,核心是解决C++的名称修饰(name mangling)问题。C++编译器会对函数名按参数类型、返回值等信息做编码,而C编译器只保留原始函数名。如果不加处理,链接时会找不到符号。解决方法就是用 extern "C" 告诉C++编译器:“这个函数按C的方式命名和链接”。

在C++代码里声明C函数(最常见场景)

当你有现成的C头文件(比如 math.h 或自定义的 utils.h),又想在C++里用其中的函数,需要把C头文件的声明“包裹”进 extern "C" 块:

  • 直接包含系统C头文件一般不用改(如 #include ),因为标准头通常已内置了 extern "C" 判断
  • 但自己写的C头文件,建议在头文件内部加保护性写法,方便C/C++都能安全包含:
// utils.h
#ifndef UTILS_H
#define UTILS_H
<h1>ifdef __cplusplus</h1><p>extern "C" {</p><h1>endif</h1><p>int add(int a, int b);        // C函数声明
void print_message(const char* s);</p><h1>ifdef __cplusplus</h1><p>}</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/3851895a4c84" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">C语言免费学习笔记(深入)</a>”;</p><h1>endif</h1><h1>endif</h1><p>
登录后复制

这样C++源文件只需 #include "utils.h" 就能直接调用 add()print_message(),无需额外修饰。

PHP高级开发技巧与范例
PHP高级开发技巧与范例

PHP是一种功能强大的网络程序设计语言,而且易学易用,移植性和可扩展性也都非常优秀,本书将为读者详细介绍PHP编程。 全书分为预备篇、开始篇和加速篇三大部分,共9章。预备篇主要介绍一些学习PHP语言的预备知识以及PHP运行平台的架设;开始篇则较为详细地向读者介绍PKP语言的基本语法和常用函数,以及用PHP如何对MySQL数据库进行操作;加速篇则通过对典型实例的介绍来使读者全面掌握PHP。 本书

PHP高级开发技巧与范例 486
查看详情 PHP高级开发技巧与范例

在C++中定义供C调用的函数

如果你在C++源文件里写了一个函数,希望让C代码也能调用它,必须用 extern "C" 修饰函数定义(或声明):

  • 只能用于函数,不能用于类、模板、重载函数
  • 不支持C++特性:不能有默认参数、引用、类对象参数/返回值、异常说明等
// helper.cpp
extern "C" {
    int multiply(int x, int y) {
        return x * y;
    }
<pre class="brush:php;toolbar:false;">void log_info(const char* msg) {
    printf("[INFO] %s\n", msg);
}
登录后复制

}

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

// main.c
extern int multiply(int, int);
extern void log_info(const char*);
<p>int main() {
int r = multiply(6, 7);
log_info("done");
return 0;
}
登录后复制

单个函数临时声明(不改头文件时用)

如果无法修改C头文件(比如第三方闭源库只有 .h + .lib),可在C++源文件中手动加 extern "C" 声明:

// main.cpp
extern "C" {
#include "legacy_api.h"  // 假设这个头文件没加 __cplusplus 判断
}
<p>int main() {
legacy_init();  // 正常调用
return 0;
}
登录后复制

注意:extern "C" 块内不能出现C++特有语法(如类、new、模板),所以只适合纯C风格头文件。

基本上就这些。关键就两点:头文件里加 __cplusplus 宏判断 + extern "C" 包裹;或者在C++源码里显式用 extern "C" 声明/定义。不复杂但容易忽略。

以上就是C++如何调用C语言函数?(extern "C"用法)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

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

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