2011-08-18 45 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代表行格式? %ld中的d是什麼?

  3. FILELINEVA_ARGS都爲C調試默認更換令牌?

感謝

回答

5

...指宏接受任何數量的參數。

%ld是一個字符串格式化程序,意思是「長十進制」,其中十進制的意思是整數。

__FILE__擴展到當前文件名

__LINE__擴展到當前行號

__VA_ARGS__擴展到傳遞給宏的參數。

調試器與它無關。所有這些都是預處理器,除了%ld這是字符串格式。

2
  1. ...表示可以給出任意數量的參數。
  2. %ld意味着signed long,雖然它有點奇怪,因爲我從來沒有見過有符號的行數。
  3. __FILE__是當前源文件的文件名。 __LINE__是當前行號。 __VA_ARGS__是給宏的參數。