【发布时间】:2022-01-10 14:31:21
【问题描述】:
我有一个很大的 __int64 字面量:
const __int64 PwTab[] = {
50036500600837093008i64,
3006206760097890820056i64
};
bcc32(Borland 经典编译器)很好地接受了它,但bcc32c(clang)却没有。
clang编译器的错误是:
整数字面量太大,无法用任何整数类型表示
我使用i64 后缀告诉计算机它是一个 64 位整数文字。
如何在clang中写出__int64字面量,同时兼容经典编译器中的__int64类型?
【问题讨论】:
-
不要使用
__int64或i64前缀。这些是已弃用的 Microsoft 特定功能。改用long long(或更好的ìnt64_t)类型和ll后缀。 -
另外,
50'036'500'600'837'093'008需要至少 66 位来表示(如果有符号则为 67 位)。您希望 64 位整数保持什么值? -
@Brian 你是对的,我没有注意到,但它在 bcc32 中编译......可能会发生一些截断或溢出而没有被编译器报告......我会有更详细地检查这一点...感谢您的 cmets!
标签: c++ c++builder clang++ literals