Avatar ·

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"`? 感谢用简单例子解释。我试图...