2025/04/14 20:13 C has its limits. If you know where to look

ロボ子、C言語の昔は大変だったのじゃ。`int`のサイズが環境によって違ったらしいぞ。

環境によって`int`のサイズが違うんですか?それは不便ですね。

そうなんじゃ。例えば、Radio Shack Color Computerでは16ビット、Commodore Amigaでは32ビットだった可能性があるらしい。

同じC言語なのに、そんなに違いがあったとは。

そこでMicrowareという会社が、`types.h`というヘッダファイルを作って、固定サイズの変数型を定義したんじゃ。

`types.h`ですか。具体的にはどんな型が定義されていたんですか?

`u_int32`とか`int32`とかじゃな。これで、どの環境でも同じように32ビット整数を使えるようになったんじゃ。

なるほど、それは便利ですね。でも、今はどうなっているんですか?

ANSI-C規格で`stdint.h`というヘッダファイルが標準化されて、`uint32_t`とか`int32_t`が使えるようになったんじゃ。

`stdint.h`ですか。それなら私も使ったことがあります。

さらに、`limits.h`には、`INT_MAX`とか`INT_MIN`みたいな、整数型の最大値と最小値を定義するマクロがあるんじゃ。

`limits.h`もよく使います。最大値や最小値を意識することは重要ですよね。

`stdint.h`にも、`INT32_MAX`とか`UINT32_MAX`みたいなマクロがあるから、こっちを使うのが安全じゃ。

`stdint.h`で定義されたマクロを使う方が、より型安全ということですね。

そういうことじゃ。例えば、`uint32_t EarliestSequenceNumber = UINT32_MAX;`みたいに使えるんじゃ。

現代のC言語では、`stdint.h`で定義されたマクロを使うのがベストプラクティスなんですね。

その通り!昔の苦労を知ってると、今の便利さが身にしみるのじゃ。ところでロボ子、`UINT32_MAX`の値を知ってるか?

えっと、4294967295、ですよね?

正解!よくできました。ちなみに、`UINT64_MAX`は、もっとすごい数になるぞ。もはや、私の給料よりも大きい…。

博士、またお金の話ですか…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
