2011-08-18 14 views
3

私はCで経験がないので、このC/objective-Cプロジェクトのこのステートメントには満足できません。Objective-Cプロジェクトの#defineステートメントについての質問

#define CBLog(...) NSLog(@"%s [%ld]: %@", basename(__FILE__), __LINE__, [NSString stringWithFormat:__VA_ARGS__]) 

質問:

  1. 3つのドット(...)がCBLog()はパラメータを持つメソッドであることを示すために使用されていますか?彼らはどういう意味ですか?

  2. %ldは行形式を表しますか? %dには何が入っていますか?

  3. FILELINEVA_ARGS Cデバッガのデフォルトの置換トークンですか?

おかげ

答えて

5

...マクロは任意の数の引数を受け付けます。

%ldは、 'long decimal'を意味する文字列フォーマッタであり、decimalは実際に整数を意味します。

__FILE__

__VA_ARGS__がマクロに渡された引数に展開され、現在の行番号に展開され、現在のファイル名

__LINE__に展開されます。

デバッガはそれとは関係ありません。これはすべて、プリプロセッサです。ただし、文字列フォーマットの%ldは例外です。

2
  1. ...は、任意の数の引数を与えることができることを意味します。
  2. %ldsigned longを意味しますが、私は署名付きの行番号を見たことがないので少し奇妙です。
  3. __FILE__は、現在のソースファイルのファイル名です。 __LINE__は現在の行番号です。 __VA_ARGS__はマクロに与えられた引数です。