C でさまざまな変数型の最大値とサイズを表示する単純な C コードを作成しようとしています。しかし、一部の変数型に対して sizeof() 演算子が -1 を返すなど、奇妙な出力が得られます。以下のコードで「%e」を「%d」に変更すると、変更しなかった指定子でも非常に異なる出力が得られるため、問題は printf コマンドで使用している指定子にあると思います。私の質問は、私が探している適切な出力、つまり最初の列の変数型の最大値と 2 番目の列の変数型のサイズを取得する方法です。
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
int main()
{
printf("Float max: %e Nbytes: %d\n",FLT_MAX,sizeof(float));
printf("Double max: %e Nbytes: %d\n",DBL_MAX,sizeof(double));
printf("Int max: %e Nbytes: %d\n",INT_MAX,sizeof(int));
printf("UnInt max: %e Nbytes: %d\n",UINT_MAX,sizeof(unsigned int));
printf("LongIntmax: %e Nbytes: %d\n",LONG_MAX,sizeof(long));
printf("UnLong max: %e Nbytes: %d\n",ULONG_MAX,sizeof(unsigned long));
printf("Longlongmax: %e Nbytes: %d\n",LLONG_MAX,sizeof(long long));
exit(0);
}
書かれたコードから得られる出力は次のとおりです。
Float max: 3.402823e+38 Nbytes: 4
Double max: 1.797693e+308 Nbytes: 8
Int max: 1.797693e+308 Nbytes: 2147483647
UnInt max: 1.797693e+308 Nbytes: -1
LongIntmax: 1.797693e+308 Nbytes: -1
UnLong max: 1.797693e+308 Nbytes: -1
Longlongmax: 1.797693e+308 Nbytes: -1
ただし、すべての '%e' を '%d' に切り替えてコードを再度実行すると、次のようになります。
Float max: 4 Nbytes: -1290994504
Double max: 8 Nbytes: 605613584
Int max: 2147483647 Nbytes: 4
UnInt max: -1 Nbytes: 4
LongIntmax: -1 Nbytes: 8
UnLong max: -1 Nbytes: 8
Longlongmax: -1 Nbytes: 8
最初の実行の 2 番目の列の出力は、2 番目の実行の最初の列の出力になります。ここで何が起こっているのかわかりません。繰り返しますが、間違った指定子を *_MAX 定数に関連付けていると思いますが、見落としている別の問題があるかどうかはわかりません。