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

c++如何调用c语言函数 c++与c混合编程【方法】

穿越時空
发布: 2025-12-23 09:27:09
原创
250人浏览过
C++调用C函数需用extern "C"声明以禁用名称修饰,确保C链接;头文件应加#ifdef __cplusplus保护;C实现须在.c文件中,参数避免C++特有类型。

c++如何调用c语言函数 c++与c混合编程【方法】

在C++中调用C语言函数,关键在于告诉C++编译器:这些函数的符号名不经过C++的名称修饰(name mangling),而是按C语言的方式链接。否则链接阶段会找不到对应符号。

使用 extern "C" 声明C函数

这是最常用、最标准的方法。在C++代码中,用 extern "C" 包裹C函数的声明(头文件包含或函数原型)。

  • 如果C函数声明在C头文件中(如 math_c.h),在C++里这样包含:
extern "C" {
#include "math_c.h"  // 包含C头文件
}
登录后复制
  • 如果只是个别函数,也可只包裹函数声明:
extern "C" {
    int add(int a, int b);      // 声明C函数
    void print_msg(const char* s);
}
登录后复制

注意:extern "C" 只影响声明,不影响定义;C函数的实现仍需放在C源文件(.c)中,或确保用C编译器编译。

C头文件兼容写法(推荐用于公共头文件)

为了让一个头文件既能在C中使用,又能在C++中安全包含,通常在C头文件里加宏判断:

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

// math_c.h
#ifndef MATH_C_H
#define MATH_C_H
<h1>ifdef __cplusplus</h1><p>extern "C" {</p>
                    <div class="aritcle_card">
                        <a class="aritcle_card_img" href="/xiazai/learn/2553">
                            <img src="https://img.php.cn/upload/webcode/000/000/000/5a2a5254595b2953.png" alt="PHP的使用技巧集">
                        </a>
                        <div class="aritcle_card_info">
                            <a href="/xiazai/learn/2553">PHP的使用技巧集</a>
                            <p>PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。它可以比 CGI或者Perl更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多。下面介绍了十个PHP高级应用技巧。
1, 使用 ip2long() 和 long2ip() 函数来把 IP 地址转化成整型存储到数据库里</p>
                            <div class="">
                                <img src="/static/images/card_xiazai.png" alt="PHP的使用技巧集">
                                <span>454</span>
                            </div>
                        </div>
                        <a href="/xiazai/learn/2553" class="aritcle_card_btn">
                            <span>查看详情</span>
                            <img src="/static/images/cardxiayige-3.png" alt="PHP的使用技巧集">
                        </a>
                    </div>
                <h1>endif</h1><p>int add(int a, int b);
void print_msg(const char* s);</p><h1>ifdef __cplusplus</h1><p>}</p><h1>endif</h1><h1>endif
登录后复制

这样C++代码直接 #include "math_c.h" 即可,无需额外加 extern "C"

编译与链接注意事项

C++调用C函数,本质是混合链接,需注意以下几点:

  • C源文件(.c)必须用C编译器(如gcc)或指定为C模式编译(Clang/GCC支持 -x c
  • C++源文件(.cpp)正常用C++编译器(如g++)编译
  • 最终链接时,把C目标文件(.o/.obj)和C++目标文件一起传给链接器(如g++自动处理,推荐统一用g++链接)
  • C函数参数/返回值避免使用C++特有类型(如class、std::string),优先用基本类型、指针、struct(且struct定义在C/C++中要一致)

常见错误与规避

容易出错的地方:

  • 忘记 extern "C" → 链接时报 “undefined reference to 'add'”
  • 在C++中用 std::string 传给C函数 → C不认识该类型,应转为 c_str() 后传 const char*
  • C头文件没加 #ifdef __cplusplus 保护 → C编译时报错(因为C不认识 extern "C"
  • 函数定义写在C++文件里但没加 extern "C" → 定义和声明链接不匹配

不复杂但容易忽略。

以上就是c++++如何调用c语言函数 c++与c混合编程【方法】的详细内容,更多请关注php中文网其它相关文章!

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

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

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

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