typedef float _Float32的声明说明符中的两个或多个数据类型;

时间:2019-02-23 17:04:04

标签: c++ c gcc

我正在从KEIL OS移植相当老的C(和一点C ++)代码基础到Linux 32位。

当使用gcc / g ++ 6.3到6.5进行编译时,它工作正常,当尝试使用gcc> 7.0进行相同操作(在ubuntu 18.04上用7.3和8.2测试)时,出现编译错误:

/usr/include/bits/floatn-common.h:207:15: error: two or more data types in declaration specifiers
 typedef float _Float32;
               ^~~~~~~~
/usr/include/bits/floatn-common.h:244:16: error: two or more data types in declaration specifiers
 typedef double _Float64;
                ^~~~~~~~
/usr/include/bits/floatn-common.h:261:16: error: two or more data types in declaration specifiers
 typedef double _Float32x;
                ^~~~~~~~~
/usr/include/bits/floatn-common.h:278:21: error: two or more data types in declaration specifiers
 typedef long double _Float64x;

编译器头文件(/usr/include/bits/floatn-common.h:261:16)包含以下部分:

# if __HAVE_FLOAT32

#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
typedef float _Float32;
#  endif

#  if !__GNUC_PREREQ (7, 0)
#   define __builtin_huge_valf32() (__builtin_huge_valf ())
#   define __builtin_inff32() (__builtin_inff ())
#   define __builtin_nanf32(x) (__builtin_nanf (x))
#   define __builtin_nansf32(x) (__builtin_nansf (x))
#  endif

# endif

告诉我这只与gcc > 7.0

有关

与该错误有关的大多数问题都缺少“;”在结构中或执行类似的操作

void int myFunction(void){}

尽管我认为不是这种情况,因为它出现在不同的编译单元中,并且可以与gcc/g++的早期版本一起使用

using glibc version 2.2 7

我的问题:有没有办法禁用此新的编译器功能,或者最终从社区中提示从哪里开始搜索

1 个答案:

答案 0 :(得分:0)

发现了问题:

在源代码中的某个地方有一个

#undef __GNUC__

这是由损坏的代码生成工具产生的...

这样做,将math.h或wchar.h的所有内容都破坏了...