来自标准头文件的C编译器错误 - 未定义的C ++定义

时间:2014-01-10 14:28:33

标签: c++ c linux ubuntu

我正在尝试编译C程序,但收到很多错误。

标准C头文件(inttypes.h,stdio.h,stat.h等)中遇到错误。

错误的来源是以下未定义的常量:

__ BEGIN_DECLS __END_DECLS __BEGIN_NAMESPACE_STD __END_NAMESPACE_STD __扔 __CONCAT

这些常量似乎有一个共同点,即它们的定义有所不同,具体取决于是使用C还是C ++编译器。

例如,此问题this question显示__BEGIN_DECLS

的以下定义
/* C++ needs to know that types and declarations are C, not C++.  */
#ifdef   __cplusplus
# define __BEGIN_DECLS  extern "C" {                                            
# define __END_DECLS }
#else
# define __BEGIN_DECLS
# define __END_DECLS
#endif

我猜到为什么会遇到这些错误?

1 个答案:

答案 0 :(得分:1)

我发现了问题:

这些常量应该在sys / cdefs.h中定义。

由于某些原因,该文件位于/usr/include/bsd/sys/cdefs.h。

cdefs.h的bsd版本没有定义这些常量。

我删除了bsd目录并重新安装了libc6-dev。

现在一切似乎都在起作用。