首页 > 解决方案 > typedef float _Float32 的声明说明符中有两个或多个数据类型;

问题描述

我正在将一个相当旧的 C(和一点 C++)代码基础从 KEIL OS 移植到 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.27

我的问题:有没有办法禁用这个新的编译器功能或最终来自社区的提示从哪里开始搜索

标签: c++cgcc

解决方案


发现问题:

在源代码的某处有一个

#undef __GNUC__

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

通过这样做, math.h 或 wchar.h 的所有包含都被破坏了......


推荐阅读