データ型int32_tを使用してiOS用のビットマスクを作成しています。次に、これはNSIntegerを受け入れる変数に設定されます。これは期待どおりにコンパイル時エラーをスローしませんが、私は疑問に思っていました-これが将来実行時エラーを引き起こす可能性がある何らかの方法がありましたか?
3938 次
1 に答える
7
一般的に、それは動作します。NSIntegerは常に少なくとも32ビット長になります。64ビットの場合、番号は一致するように符号拡張されます(キャストする必要がある場合があります)。実行時エラーは発生しません。
NSIntegerに関する詳細情報
NSIntegerは、(NSObjCRuntime.hからの)次のコードを使用して定義されます。
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif
これは、64ビット、組み込みOS、iPhone、Windows用にコンパイルする場合、または64ビットのように32ビットを構築NSInteger
する場合と同等であることを意味します。long
それ以外の場合は、と同等int
です。int
とは同等であるためint32_t
、OS X上の32ビットアプリケーションで問題ありません。他の状況では、のサイズによって異なりますlong
。
64ビットOSXアプリケーションでlong
は、は64ビットの数値です。iPhoneではlong
、32ビットの数値です。私はWindowsについて知りません、そして64ビットのように32ビットを構築するときにそれが32ビットまたは64ビットの長さを使用するかどうかわかりません。
于 2011-03-29T18:39:26.687 に答える