我想知道放哪里比较好
#ifdef __cplusplus
extern "C" {
#endif
在 C 头文件中。
在开始或之后所有其他包括。为什么 ?
对此没有严格的规定,但请注意以下事项。
只知道 extern "C" 背后的想法是它使编译器生成 C 友好的链接。否则,使用 C++ 编译器编译的代码会在使用 C 编译器编译的存档中查找要链接的损坏名称,但找不到它们。
此构造用于使您的名称可用于 C 链接器(简短说明)
所以很明显你只想在你的东西周围使用它。
像这样 :
#ifndef MY_INCLUDE_H_ // include guard
#define MY_INCLUDE_H_
#include <...> // dependencies
#include "..."
#ifdef __cplusplus
extern “C” {
#endif
// ... your types, methods, variables
#ifdef __cplusplus
}
#endif
#endif // MY_INCLUDE_H_
extern "C" 影响链接。编译 C++ 函数时,它们的名称会有所不同,这就是 C++ 中可以重载的原因。因此,函数名称会根据参数的类型和数量进行修改,因此具有相同名称的两个函数将具有两个不同的符号名称。
extern "C" 中的代码仍然是 C++ 代码。在外部“C”块中可以做的事情是有限制的,但它们都是关于链接的。
extern "C"
影响代码的编译方式。设计为同时编译为 C 和 C++ 的头文件将extern "C"
自行管理。您永远不#include
应该将指令包装在extern "C"
块中:如果所涉及的标头设计为双向编译,则您的指令是多余的,并且如果它不是设计为双向使用,那就是错误。