在 extern "C" { ... } 中包装标准 C++ 标头的 #include 指令?
Wrapping a #include directive for a standard C++ header in extern "C" { ... }?
我最近在一个.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 */
我一直以为这没什么区别,但我看到它太频繁了,我开始好奇了。
根据头文件中的"If…def"语句,
"if" block: "if你在c++中使用特定的头文件"
"else" block: "如果你使用的不是c++的特定头文件,可能是C"
如果你没有将"extern C"中的头文件包装在"if"块中(这意味着c++),那么函数名的"C"链接将不会被维护。
"C"没有函数重载的概念,但在c++中。所以c++编译器对"extern C"函数做了一些函数名混淆。
这是一篇很好的文章。在c++源码中,extern " C "的作用是什么?
对于常规的标准C库,不需要外部包装器。大多数情况下由标准c负责。
示例:如下所示(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 }
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- C++:对不存在的命名空间使用命名空间指令
- 函数名是c中该函数的第一条指令的地址吗
- 错误:无效的预处理指令 #i 的意思是 #if?
- 组装指令中乘法的下部和上部是什么
- OpenMP 与有序和关键指令并行
- C++中的移动分配出现问题.非法指令: 4.
- 嵌套命名空间的"using"指令,但需要命名内部命名空间
- C++CMake编译指令与
- 使用宏扩展的泛型:为什么指令缓存使用不当?
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- AVX 指令中寄存器和指针之间的客观差异
- while 循环 c++ 中的非法指令
- 如何在编译时定义C++预处理器指令的值?
- 存储指令是否会阻止缓存未命中的后续指令?
- 保证编译器指令在C++中重新排序
- VS2008中的AVX-512指令库
- 令人困惑的定义指令在C ++项目中
- 是否有用于元素部分移位的 simd 指令/内在/内置指令?