extern "C" {
  int var = 1;
  int func();
}

c语言中并没有extern "C"的语法,这是专门用在c++文件中的,用来兼容c,{}内的内容被视为c语言代码处理

之所以需要这样,是因为,在链接库、文件等等的过程中,我们是依靠符号来定位的,而c++和c语言对 符号的修饰 并不一致,这就导致了,如果c++要调用c库的某些函数(并且不使用extern "C"),那么c++对符号的修饰与c库本身对符号的修饰不同,简单来说就是对不上号,自然也就无法正确链接了

所以在某些系统头文件中,我们会使用 __cplustplus 宏去判断当前文件是c++还是c,配合上条件编译就没有问题了 (c++编译器在编译c++时会默认定义这个宏)

写法如下:

#ifdef __cplusplus
extern "C" {
#endif

void memset(void *, int, size_t);

#ifdef __cplusplus
}
#endif
 posted on 2025-03-13 21:08  Dylaris  阅读(24)  评论(0)    收藏  举报