Dan*_*ski 6 c extern c-preprocessor
我试图找到#include放在extern C区块内的所有地方.可以使用预处理器检查这个吗?我想在我的头文件中添加这样的内容:
#ifdef EXTERN_C_IS_IN_EFFECT
#error File included from extern "C" block!
#endif
Run Code Online (Sandbox Code Playgroud)
我也在寻找其他在这种情况下编译失败的方法,例如使用一些特殊属性.我使用的是gcc 4.4.7.
我定义了以下宏,然后在需要防止包含在extern C块中的每个头中使用它:
#define ASSERT_NO_EXTERN_C void assert_no_extern_c(int); void assert_no_extern_c(double);
Run Code Online (Sandbox Code Playgroud)
这是不可能的,因为预处理器在任何语法分析完成之前运行; 也就是说,预处理器甚至不知道extern "C"它是什么,它的动作也不能依赖于这种指令的存在.
但是,链接规范会嵌套,因此extern "C"您可以将标头放在extern "C++"规范中,以确保它使用C++链接,而不是确保包装器未指定.