かなり変だと思うものに出くわしました。テストプログラム
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バイトです。ただし、longlongが割り当てられるように変更すると
long long unsigned ll = 0x123456789;
コンパイル時に取得します
error: integer constant is too large for "long" type
オプションを使用して64ビットビルドを強制すると、この同じテストが-m64
コンパイルされます。私は何か間違ったことをしていますか、それともこれはGCCのバグですか?