美文网首页
c++之extern "c"

c++之extern "c"

作者: 全村的卡密 | 来源:发表于2020-02-27 12:00 被阅读0次

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等可以针对一段代码。

相关文章

网友评论

      本文标题:c++之extern "c"

      本文链接:https://www.haomeiwen.com/subject/owapchtx.html