Я столкнулся с чем-то, что я думаю довольно странным. Программа испытанийприсвоение значения длинным длинным целым с использованием gcc на sparc solaris
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 unsigned ll = 0x123456789;
во время компиляции я получаю
error: integer constant is too large for "long" type
Теперь этот же тест делает компиляции, если я заставляю 64 битную сборку с помощью опция -m64
. Я что-то делаю неправильно или это ошибка в GCC?