【发布时间】:2020-08-03 12:38:16
【问题描述】:
我在 C89 中工作,环境非常有限。我需要为基于 GCC 4.4 的编译器编写代码,但我的代码还必须通过使用 GCC 3.2 编译的测试。我们日常的开发编译器是 GCC 5.4。就我的钱而言,这听起来很疯狂,但这些都是我收到的牌。
因为我们需要 64 位整数,所以我们采取了放宽 C89 规则的步骤,以便使用long long。我们的初始代码处理这样的问题:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wlong-long"
typedef unsigned long long my_type
#pragma GCC diagnostic pop
不幸的是,这不适用于 GCC 4.4,因为在 GCC 4.6 中引入了 push 和 pop 操作,所以我将其更改为:
#pragma GCC diagnostic ignored "-Wlong-long"
typedef unsigned long long my_type
#pragma GCC diagnostic error "-Wlong-long"
唉,GCC 3.2 不喜欢它:
warning: ignoring #pragma GCC diagnostic
ISO C89 does not support `long long'
warning: ignoring #pragma GCC diagnostic
看到它是用-Wunknown-pragmas编译的,我怀疑#pragma GCC diagnostic在GCC 3.2发布时并不存在。
有人可以提出解决方案吗?
【问题讨论】:
-
那么为什么不使用命令行将
-Wno-long-long传递给编译器选项呢?为什么要使用编译指示? -
技术主管认为,如果我们这样做,人们将有太多空间开始在代码中添加
long long。 -
@Walkinbeard 你永远不应该使用默认类型 int、long 等
标签: c gcc embedded gcc3 gcc4.4