我有一个C标头作为C ++库的一部分。
此C标头仅由C编译器或extern "C" { ... }块内的C ++编译器编译才有意义,否则将发生未解决的链接错误。
我想添加一个块,例如:
#ifdef __cplusplus
#error "Compiling C bindings with C++ (forgot 'extern \"C\"'?)"
#endif
Run Code Online (Sandbox Code Playgroud)
在C标头中,但不幸的__cplusplus是,宏也是在一个extern "C" { ... }块中定义的。
还有另一种方法可以正确检测这种情况吗?
Sto*_*ica 101
通常的做法不是要求客户端代码在中包装标头extern "C",而是自己有条件地这样做。例如:
#ifdef __cplusplus
extern "C" {
#endif
// Header content
#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)
这样,客户端代码将自动正确,而无需执行任何操作(包括标头)。