gpt4 book ai didi

c++ - 在 sparc solaris 上使用 gcc 为长整数赋值

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:28:10 24 4
gpt4 key购买 nike

我遇到了一些我认为很奇怪的事情。测试程序

int main(int argc, char* argv[])
{
cout<<"hello"<<endl;
long unsigned l = 0x12345678;
long long unsigned ll = 0x12345678;
cout<<sizeof(l)<<endl;
cout<<sizeof(ll)<<endl;
};

输出是:

hello    
4
8

没有惊喜。 long int 的大小为 4 个字节,long long 的大小为 8 个字节。但是,当我更改它以便分配 long long 时

long long unsigned ll =  0x123456789;

在编译时我得到

error: integer constant is too large for "long" type

现在,如果我使用选项 -m64 强制进行 64 位构建,则同样的测试编译。我做错了什么或者这是 GCC 中的错误?

最佳答案

将其更改为

long long unsigned ll = 0x123456789ULL; // notice the suffix

没有后缀,字面量大于机器上的最大 unsigned long 值,并且根据 C++03(但不是 C++11,它有 long long), 是未定义的行为。这意味着任何事情都可能发生,包括编译时错误。

在 C++03 中没有 long long 也是毫无意义的,所以它不能保证工作,你依赖于扩展。您最好不要使用 C++11。

关于c++ - 在 sparc solaris 上使用 gcc 为长整数赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9467776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com