C++中的extern "C"是什么以及为什么在使用C库时需要它
你好!我开始学习C++,遇到了`extern "C"`这个结构,经常在头文件中看到它。例如,在像SDL这样的库中,或者连接旧的C函数时。
下面是我在一篇文章中找到的例子:
```cpp
// my_header.h
#ifdef __cplusplus
extern "C" {
#endif
void my_c_function(int x);
int another_c_function(const char* str);
#ifdef __cplusplus
}
#endif
```
我理解这与链接和函数名称有关,但无法理解细节。我特别感兴趣的是:
1. 为什么在C++中使用C函数时,如果没有`extern "C"`可能会出现链接错误?
2. 什么是“name mangling”,它如何与这个问题相关?
3. 为什么要把声明包裹在`#ifdef __cplusplus`中?因为如果我写C++代码,`__cplusplus`总是被定义的,对吗?
4. 如果我想要自己的C++函数能从C代码中访问,是否可以对它们使用`extern "C"`?
感谢用简单例子解释。我试图...