在extern中为标准C ++标题包装#include指令" C" {...}?

时间:2016-10-10 23:42:07

标签: c++ include extern

我最近在.h文件的开头看到了这个块。

#ifdef __cplusplus
  extern "C" {
  #include <cstddef>
  #include <cstdint>
#else
  #include <stddef.h>
  #include <stdint.h>
#endif /* __cplusplus */

#include中为标准C ++标头包装extern "C" { ...指令实际上做了什么吗?它在功能上与以下不同:

#ifdef __cplusplus
  #include <cstddef>
  #include <cstdint>
  extern "C" {
#else
  #include <stddef.h>
  #include <stdint.h>
#endif /* __cplusplus */

我的印象是,这没什么区别,但我经常看到它变得好奇。

1 个答案:

答案 0 :(得分:0)

基于&#34;如果... def&#34;

中的头文件中的语句

&#34;如果&#34; block:&#34;如果你在C ++中使用特定的头文件&#34;

&#34;其他&#34; block:&#34;如果您使用的不是C ++中的特定头文件,可以是C&#34;

如果你没有将标题包装在&#34; extern C&#34;在&#34;如果&#34; block(适用于C ++),&#34; C&#34;不为函数名维护链接。

&#34; C&#34;没有功能超过加载概念,但作为C ++。所以C ++编译器为&#34; extern C&#34;做了一些函数名称修改。功能

这是一篇非常好的文章。 在C ++源代码中,extern“C”的作用是什么? - 堆叠过流。

对于常规标准C库,不需要extern包装器。大多数情况下,它由标准C照顾。

ex:类似下面的内容(Windows上的yvals.h)。

  #define _C_LIB_DECL       extern "C" {    /* C has extern "C" linkage */
  #define _END_C_LIB_DECL   }
  #define _EXTERN_C         extern "C" {
  #define _END_EXTERN_C     }