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