c++ - 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.2
7
我的问题:有没有办法禁用这个新的编译器功能或最终来自社区的提示从哪里开始搜索
解决方案
发现问题:
在源代码的某处有一个
#undef __GNUC__
这是由损坏的代码生成工具生成的...
通过这样做, math.h 或 wchar.h 的所有包含都被破坏了......
推荐阅读
- python - 如何检查一个字典的值是否与 Python 中另一字典的值部分匹配?
- laravel - 清除缓存后在 null 上调用成员函数 connection()
- r - 将投影转换为地理坐标 R
- bash - 期望的自动密码输入不适用于将远程机器安装到我的本地文件夹
- reactjs - 当我们已经在调用 Modal 的 Button 中使用切换时,为什么我们必须在 Modal 和 ModalHeader 中使用切换?
- python - 在字典中切片列表的子集:如何将索引转换为整数?
- c# - 在 C# 中连接两个控制台应用程序
- css - 使所有行的高度与第一个 CSS 网格相同
- javascript - React Native Maps - 使用 Google Maps API 从 JSON 文件中显示标记
- json - .NET Core 中特定控制器的 Json 序列化设置