我在相当受限的环境中使用 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 发布时不存在。
有人可以提出解决方案吗?