![](/img/trans.png)
[英]Could we use extern "C" in C file without #ifdef __cplusplus?
[英]Where is the best place to put the #ifdef __cplusplus extern “C” { #endif
我想知道哪里更好
#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_
外部“C”影响联系。 当编译C ++函数时,它们的名称会有所不同,这就是为什么在C ++中进行重载是可能的。 因此,函数名称会根据参数的类型和数量进行修改,因此具有相同名称的两个函数将具有两个不同的符号名称。
extern“C”中的代码仍然是C ++代码。 你可以在extern“C”块中做些什么,但它们都是关于链接的。
extern "C"
会影响代码的编译方式。 设计为C和C ++编译的标头将自己管理extern "C"
。 你永远不应该在一个extern "C"
块中包含一个#include
指令:如果所涉及的头被设计为双向编译你的指令是多余的,如果它不是设计为双向使用它是一个错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.