c++之extern "c"

extern "c"

  • 被extern "c"修饰的代码将用c语言方式编译。
    例如对重载函数进行修饰,将编译不通过,因为c语言不支持重载。
extern "c"{
 void display(){
 }
 void display(int a){
 }
}
  • 对函数声明进行extern "c"修饰,函数实现不需要再修饰。

通常在使用别人写的库的时候,有些库是用c语言写的,这时候就需要用到extern "c"。
原因是按照c++方式编译,会对函数名进行name mangling,比如display()会被命名为display_void()。而c语言就不会,可能只是在函数名前加个_(如_display)。

一般将extren "c"直接写在库里,但是c语言无法识别extern "c",所以如何区分c++和c呢?

在c++源文件会默认含有#define __cplusplus,所以可以通过判断有无该宏来判断是否是c++编译。

#ifdef __cplusplus
   extern "c"{
#endif

...

#ifdef __cplusplus
}
#endif

tips:
养成使用

#ifndef __xxx
#ifdef __xxx
...

#endif

或者
#pragma once

避免重复引入,但是pragma once受编译器限制,一些老版本的编译器无法使用。
并且pragma once只能针对整个文件,而ifndef等可以针对一段代码。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容