質問: int main(void) { puts("本環境での各文字型・整数型の値の範囲"); printf("char : %d~%d\n", CHAR_BIT , CHAR_BIT); printf("signed char : %d~%d\n", CHAR_BIT , CHAR_BIT); printf("unsignd char : %d~%d\n", 0 , CHAR_BIT); printf("short : %d~%d\n", CHAR_BIT , CHAR_BIT); printf("int : %d~%d\n", CHAR_BIT , CHAR_BIT); printf("long : %d~%d\n", CHAR_BIT , CHAR_BIT); printf("unsigned short: %d~%u\n", 0 , CHAR_BIT); printf("unsigned : %d~%u\n", 0 , CHAR_BIT); printf("unsigned long : %u~%u\n", 0 , CHAR_BIT); return 0; } これで出力が以下となりました。 本環境での各文字型・整数型の値の範囲 char : 8~8 signed char : 8~8 unsignd char : 0~8 short : 8~8 int : 8~8 long : 8~8 unsigned short: 0~8 unsigned : 0~8 unsigned long : 0~8 正しい結果でしょうか?
回答: CHAR_BITを再定義したところで、それに伴って他のマクロ定数が変化するわけでは無いからです。 limits.hを直接書き換えればCHAR_MAXも別の値になる**かも**しれませんが、 勝手に書き換えて期待どおりに動作する保証が無いのは言うまでもありません。 質問編集を受けて > > 書き換えました。 > > ... > > これで出力が以下となりました。 > > ... > > 正しい結果でしょうか? > > > 8を出力したら8が出力されたのですから、正しい結果でしょうね。(**註**) 次の質問と本質的に同じです。 ``` #include int main(void) { int num = 42; printf("%d\n", num); // 42が出力されました。正しいでしょうか? return 0; } ``` 42を出力したら42が出力されたのですから、正しい結果でしょうね。 何が疑問なのか分かりません。 **註**: ただし、実際の値の範囲が表示されているわけではもちろん無い。