0
点赞
收藏
分享

微信扫一扫

extern “C“的作用

Just_Esme 2022-02-09 阅读 44

文章目录

写作背景

extern "C"的作用,网上有很多文章描述。但是我在真正弄懂它的意思之前,看了2~3篇文章,依然云里雾里,感觉是那么个意思,但是没有真正通透。所以我停下来,自己在脑海里总结大家所说的,才有所领悟。
重点看(# 实际中是如何发挥作用的)

extern "C"的目的

extern "C"包含两部分,extern和后面的“C”,extern的作用就是申明当前修饰的变量或者函数是在其他模块(文件)中定义的,只起一个申明(说明)的作用,不分配及占用内存。
后面的"C"才是真正不好理解的。extern "C"的真实目的,是为了实现c和c++的混合编程

为何需要extern “C”

本质原因是c和c++的编译方式不一样导致的。c++为了实现函数重载,函数名在编译后,会包含函数名和参数,而c中函数在编译后,只有函数名。所以在c++中调用c函数的时候,需要申明extern “C”。

使用extern "C"的场景

1、C++代码调用C语言代码
2、在C++的头文件中使用
3、在多个人协同开发时,可能有的人比较擅长C语言,而有的人擅长C++,这样的情况下也会有用到

实际中是如何发挥作用的

假设b.cpp中要调用int add(int, int)函数,但是add函数是在a.so中定义的,而a.so又是通过a.c和a.h编译而成的。如此一来,a.so中的add函数是类似_add这样的,而b.cpp中在连接时去找_add_int_int这样的函数名,自然找不到,但是如果在a.h中加入extern "C"的申明,则b.cpp在链接时就知道应该去找_add,而应该去找_add_int_int。但是注意,这种情况下extern "C"需要和#ifdef __cplusplus结合使用,因为extern "C"是c++的语法,在c中使用extern "C"会报错。需要了解的是,__cplusplus在c++文件中默认定义,但是在c文件中不会定义,所以如果不加#ifdef _cplusplus,当a.h在c代码中使用时,就会出现编译错误。。示例代码如下:

举报

相关推荐

0 条评论