我最近在.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 */
我的印象是,这没什么区别,但我经常看到它变得好奇。
答案 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 }