【STM32】混编C与C++时,extern “C“的相关笔记

externC用于在C++中以C语言的方式调用函数,避免名称修饰问题。文章解释了如何在C中调用C++函数,包括处理函数重载的情况,通过特定的命名约定来区分不同的函数版本。

以下是与Chatgpt的对话记录

1. extern "C"的作用是什么?

extern “C” 是一个关键字组合,用于告诉编译器按照 C 语言的约定来处理函数或变量的名称和调用方式。在 C++ 中,函数名和变量名由于支持函数重载特性而不同于 C 语言,它们被编译器进行了一定的名称修饰(Name Mangling)。因此,如果需要使用 C 语言编写的函数库,就需要使用 extern “C” 声明来显式地指定 C 语言的调用约定,以保证 C++ 能够正确地使用这些函数。

例如,在 C++ 中调用一个 C 函数:

extern "C" int add(int a, int b);  // 声明

int main()
{
   
   
    int sum = add(1, 2);  // 调用
    return 0;
}

通过 extern “C” 声明,编译器会按照 C 语言的传统方式来调用函数。这样就可以在 C++ 中使用 C 函数库,而无需考虑 C++ 名称修饰的问题。

2. 如何在.C中调用.C++的函数?

在 C 中调用 C++ 的函数时,由于 C++ 支持函数重载和命名空间(namespace)等特性,C++ 编译器会对函数名称进行修饰,导致无法直接使用 C 接口的函数。

因此,需要通过 extern “C” 关键字组合来告诉编译器按照 C 语言的方式对函数进行处理。具体地,需要在 C++ 函数的定义以及声明前添加 extern “C” 关键字组合,这样编译器就会生成不带名称修饰的符号名称。

例如,在 C++ 中定义如下的函数:

// add.h 文件
#ifndef ADD_H
#define ADD_H

#ifdef __cplusplus
extern "C"
#endif
int add(int a, int b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值