C++中的extern "C"是做什么的,为什么需要它?
大家好!我写C++的时间不长,在使用C语言库(比如某个旧的图形库)的过程中,我经常遇到`extern "C"`这个结构。我在头文件中看到它,但不太明白它的作用。
例如,我有这样的代码:
```cpp
// mylib.h
#ifdef __cplusplus
extern "C" {
#endif
void my_c_function(int x);
#ifdef __cplusplus
}
#endif
```
或者当我自己包含一个C语言头文件时:
```cpp
// main.cpp
extern "C" {
#include "clibrary.h"
}
```
我读到这与“name mangling”(二进制文件中函数的命名方式)有关,但我不明白具体是如何工作的。为什么没有`extern "C"`,我的程序就找不到C库中的函数,并出现类似“undefined reference”的链接错误?毕竟我已经声明了它!
请给新手解释一下:这个结构具体做了什么,在哪些情况下是必须的,以及它如何影响编译和构建过程。