9

Objective-C では、変数パラメータを受け取る関数がある場合、書式指定子が関数に渡される実際のパラメータと一致することをどのように保証しますか?

4

2 に答える 2

28

これは、NS_FORMAT_FUNCTION マクロを使用して行われます。

次のような関数があるとします。

LOG(int level,NSString *format,...);

レベルはログ レベルであり、フォーマットにはフォーマット文字列が含まれ、可変引数はフォーマット文字列へのパラメーターです。

コンパイル時にパラメーターの数と型が正しいことを確認するために、関数を次のように定義します。

LOG(int level,NSString *format,...) NS_FORMAT_FUNCTION(2,3);

ここでの 2 と 3 は、フォーマット文字列の引数リスト内の位置と、可変パラメータ リストの開始を示していることに注意してください。

于 2013-06-07T11:39:16.860 に答える
0

C はデフォルトでどちらもチェックしません。

現在: LLVM では、パラメータの数とタイプの両方を CF マクロを介してチェック (強制) できます。NS_FORMAT_FUNCTION

于 2013-06-07T14:54:48.267 に答える