書式printf
指定子が型と一致しないため、未定義の動作が発生します。試す:
printf("long long value %llX\n", test);
%d
結果の形式も間違っていますsizeof
。そこを利用しているはずです%zu
。
いくつかの警告設定を有効にすると、コンパイラが警告を表示する場合があります (clang
たとえば、デフォルトでは警告が表示されます)。
example.c:6:30: warning: format specifies type 'unsigned int' but the argument
has type 'unsigned long long' [-Wformat]
printf("long long value %X\n", test);
~^ ~~~~
%llX
example.c:7:14: warning: format specifies type 'int' but the argument has type
'unsigned long' [-Wformat]
printf("%d", sizeof(test));
~^ ~~~~~~~~~~~~
%ld
2 warnings generated.
編集: あなたの質問で、Visual C を使用していることに気付きました。これ %z
は C99 の機能であり、コンパイラでサポートされていない可能性があります。その場合は、ドキュメントをチェックして、使用する正しい形式を確認する必要があります。