包含 C 库时,何时应将包含包装在"外部"C""中

When should you wrap include in `extern "C"` when including a C Library

本文关键字:包含 外部 库时 何时应 包装      更新时间:2023-10-16

我知道,当您在c++项目中包含c标头时,必须用extern "C"包装它,因为c++c有两种不同的识别函数的方法。c将使用名称来标识函数,而c++必须使用名称和参数来满足函数重载。

我不明白的是,为什么有c标头不需要像windows.h一样封装在extern "C"中??

通常,在extern "C"中封装C标头不是一个好主意。标头可能包含其他在执行此操作时中断的文件。设计在C++中使用的C头将适当地处理extern "C",而无需执行任何操作。典型代码:

#ifndef MY_HEADER_INCLUDE_GUARD
#define MY_HEADER_INCLUDE_GUARD
#ifdef __cplusplus
extern "C" {
#endif
/* C callable stuff goes here */
#ifdef __cplusplus
}
#endif
#endif /* MY_HEADER_INCLUDE_GUARD */