c++之extern "c"

2020-02-27  本文已影响0人  全村的卡密

extern "c"

extern "c"{
 void display(){
 }
 void display(int a){
 }
}

通常在使用别人写的库的时候,有些库是用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等可以针对一段代码。

上一篇 下一篇

猜你喜欢

热点阅读