long型のデータサイズに注意(64bitコンパイラ) ======================================== LinuxでのCコンパイラで、32bit環境と64bit環境では、long型のデータサイズが違うので注意。 データ型とサイズ -------------- ^ 型名 ^ サイズ (32 ビット) ^ サイズ (64 ビット) ^ 備考 ^ | char | 1 バイト | 1 バイト | | | short | 2 バイト | 2 バイト | | | int | 4 バイト | 4 バイト | | | long | 4 バイト | **8 バイト** | サイズが異なる | | long long | 8 バイト | 8 バイト | | * 整数型の前には、修飾子 signed または unsigned が付けられる。符号修飾子が存在しない場合、その型は符号付き (signed) であると見なされる。 stdint.hでのデータサイズ ---------------------- 最近のCコンパイラでは、`stdint.h` で定義の型が使えるようになっているので、極力この型を使うようにした方がよい。 ^ 型名 ^ 説明 ^ 備考 ^ | int8\_t | 1 バイトの符号付き整数 | | | int16\_t | 2 バイトの符号付き整数 | | | int32\_t | 4 バイトの符号付き整数 | | | int64\_t | 8 バイトの符号付き整数 | | | intptr\_t | ポインタと同じサイズの符号付き整数 | | | uint8\_t | 1 バイトの符号なし整数 | | | uint16\_t | 2 バイトの符号なし整数 | | | uint32\_t | 4 バイトの符号なし整数 | | | uint64\_t | 8 バイトの符号なし整数 | | | uintptr\_t | ポインタと同じサイズの符号なし整数 | | 参考 ---- 1. [[https://docs.oracle.com/cd/E19253-01/819-0395/chp-typeopexpr-2/index.html?utm_source=pocket_mylist|データ型とサイズ]] 2. [[http://mixmemo.blogspot.com/2009/09/linux-3264_23.html?utm_source=pocket_mylist|Linux 32ビット版と64ビット版の違い -- データサイズ]]