sizeof() に関する質問に答えながら、GCC がどのように処理するかを確認するために、次のコードを書きました。
#include<stdio.h>
#include<stddef.h>
#include<limits.h>
int main(int ac, char *argv[])
{
printf("%zu\n", sizeof(9999999999999999999999999999999999999999999999999999) );
printf("%zu %zu \n", sizeof(int), sizeof(long long));
return 0;
}
コンパイルすると、GCC (4.1.2) は警告を発行しました (予想どおり):
t.c:8:24: warning: integer constant is too large for its type
t.c: In function main:
t.c:8: warning: integer constant is too large for long type
出力は次のとおりです。
16
4 8
sizeof(9999999999999999999999999999999999999999999999999999)
GCCはそれが16だとどのように言いますか?! がどんなに大きくnumnber
ても、 より大きい整数リテラルの場合は常に 16 ですLLONG_MAX
。私の 64 ビット プラットフォームsizeof(long)
では に等しいsizeof(long long)
です。
GCC がこのように動作するのはなぜですか? それはある種の未定義の動作ですか?!