LP64 環境では、sizeof は、unsigned long
として実装される size_t
の実効的なデータ型を持ちます。sizeof は、int
型の引数を期待する (受け取る) 関数に渡されたり、int
に代入またはキャストされることがあります。このような切り捨てによってデータが失われることがあります。次に例を示します。
long a[50]; unsigned char size = sizeof (a);
この場合、次の警告が出ます。
warning: 64-bit constant truncated to 8 bits by assignment warning: initializer does not fit or is out of range: 0x190