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

c++怎么使用extern "C"_c++ extern "C"使用方法

穿越時空
发布: 2025-10-03 13:02:02
原创
1055人浏览过
extern "C"用于C++中按C语言方式编译函数,避免名字修饰问题。它使C++能调用C函数或被C调用,需在头文件中用__cplusplus宏包裹,仅适用于全局函数和变量,不可用于类成员或重载函数。

c++怎么使用extern \

在C++中使用 extern "C" 主要是为了实现C++代码与C代码的混合编译,解决C++编译器对函数名进行“名字修饰(name mangling)”的问题。C语言不进行名字修饰,而C++为了支持函数重载会改变函数名,导致链接时找不到C函数。

extern "C" 的作用

extern "C" 告诉C++编译器:这部分函数或变量按照C语言的方式进行编译和链接,即不进行名字修饰,保持原始函数名。

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

基本使用方法

常见于头文件中,用于包含C语言编写的函数声明。

1. 单个函数声明:

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

extern "C" void my_c_function();
extern "C" int add(int a, int b);

2. 多个函数批量声明(推荐写法):

extern "C" {
    void func1();
    int func2(int x);
    double calculate(double a, double b);
}

在头文件中正确使用 extern "C"

如果你有一个C语言写的库(比如 mylib.h 和 mylib.c),想在C++程序中调用,需要在头文件中做兼容处理。

AppMall应用商店
AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

AppMall应用商店 56
查看详情 AppMall应用商店

示例 mylib.h:

#ifndef MYLIB_H
#define MYLIB_H

#ifdef __cplusplus
extern "C" {
#endif

void say_hello();
int add_numbers(int a, int b);

#ifdef __cplusplus
}
#endif

#endif // MYLIB_H

解释:

  • __cplusplus 是C++编译器定义的宏。
  • 当这个头文件被C++编译器包含时,会加上 extern "C",按C方式链接。
  • 当被C编译器包含时,extern "C" 不会被引入(因为C不认识),避免编译错误

实际调用示例

C语言实现文件 mylib.c:

#include <stdio.h>
#include "mylib.h"

void say_hello() {
    printf("Hello from C!\n");
}

int add_numbers(int a, int b) {
    return a + b;
}

C++调用文件 main.cpp:

#include "mylib.h"

int main() {
    say_hello();
    int result = add_numbers(3, 5);
    return 0;
}

编译命令(假设用g++):

gcc -c mylib.c -o mylib.o
g++ main.cpp mylib.o -o program

注意事项

  • extern "C" 只能用于全局函数和变量,不能用于类成员函数。
  • 不能用 extern "C" 声明重载函数,否则编译报错。
  • extern "C" 不改变C++函数的调用约定,只影响名字修饰。
  • 如果C++函数要被C代码调用,该函数也必须用 extern "C" 声明,并且使用C兼容的数据类型。
基本上就这些。只要在混合编译C和C++时记得用 extern "C" 包装C的接口声明,就能顺利链接。

以上就是c++++怎么使用extern "C"_c++ extern "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号