【发布时间】:2011-04-30 09:04:35
【问题描述】:
我偶尔会在我的一个开源 C++ 库中使用 64 位算术。我发现long long 非常适合我的目的。甚至一些有 10 年历史的 solaris 盒子也可以编译它。并且它也可以在 Windows 上使用 #defines 来工作。
现在的问题是我收到了用户的抱怨,因为他们使用 GCC -pedantic 设置进行编译,而 GCC 坚持发出警告,指出 long long 不是 C++ 标准的一部分。这可能是对的,但我对 C++ 标准本身并不太感兴趣,我只是希望我的代码能够在尽可能多的编译器上工作。
所以我的问题是双重的:
- 谁能说出不支持 64 位 long long 的实际 C++ 编译器?
- 有没有办法让 GCC 编译 64 位算术(在 32 位平台上)而没有编译器警告? (stdint.h 没有帮助,因为它还取决于
long long)
附:
如果有平台的 long long 变成 128 位或更大,这很有趣,但对我来说不是问题。
【问题讨论】:
-
使用 -pedantic 是完成no工作并无缘无故阻止使用大多数第三方库的好方法。这就是它在罐头上所说的 - 毫无意义的抱怨,但我认为告诉你的用户不要再傻了也会让他们喜欢你!?
-
@Clifford:
-pedantic可以帮助您编写将来易于移植到其他编译器的代码。如果您对此不担心,则不必使用它,但您最终将成为编写所有第三方库的人,这些库 (a) 会产生奇怪的警告,并且 (b) 很可能不会不适用于某些编译器。诚然,long long不是最有可能的真正问题,但我曾经从事便携式产品的工作,并且有几次我们从 Windows 男孩那里修复了实际上在我们的某些平台上不起作用的东西(而 gcc -pedantic 会已经告诉他们了)。 -
...奇怪的是,当 linux 程序员在产品的可移植组件上工作时,他们的代码不太可能在其他平台上通过测试。
-
@Steve:我认为您应该在所问问题的上下文中看到 Clifford 的评论,并且 100% 便携并不是这里的目标。
-
我知道您自己不需要它,问题是您的用户为什么使用
-pedantic。克利福德认为没有任何理由,因为他认为迂腐的警告是没有意义的,而且你的用户很傻。我怀疑这个分析有几个方面:-)
标签: c++ gcc portability