サンプル コードの Objective-C の性質については申し訳ありませんが、私の質問に対する答えは、C 標準ライブラリおよび/または Appleclang
コンパイラ内にあると確信しています。
NSArray
可変数のアイテムが含まれています。項目数を使用して 1 から 3 の間の値を作成したいと考えています。CMAX
マクロを使用していますが、奇妙な動作があります。
NSLog( @"%d %d %d %d", 1, [tasks count], 3 - [tasks count], MAX( 1, 3 - [tasks count] ) );
アイテムの数を増やしたときのこのログ ステートメントの出力tasks
は次のとおりです。
1 0 3 3
1 1 2 2
1 2 1 1
1 3 0 1
1 4 -1 -1
ドキュメントを少し調べたところ、count
関数が を返していることがわかりましたNSUInteger
。私のジレンマの解決策は、戻り値をNSInteger
次のように型キャストすることです。
NSLog( @"%d %d %d %d", 1, (NSInteger)[tasks count], 3 - (NSInteger)[tasks count], MAX( 1, 3 - (NSInteger)[tasks count] ) );
1 0 3 3
1 1 2 2
1 2 1 1
1 3 0 1
1 4 -1 1
(Objective-C に慣れていない場合は、32 ビット アーキテクチャではおよびがNSInteger
typedef されます。)int
NSUInteger
unsigned int
元のコードで暗黙的に発生した型キャストを理解するのに苦労しており、直感的でない結果につながっています。誰でも点灯できますか?