关于Objective-C项目中的 #define 语句的问题

3

我对C语言不熟悉,因此在这个C/Objective-C项目中,我对这个语句感到不舒服。

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

问题:

  1. 3个点(...)用于表示CBLog()是一个带有参数的方法?它们代表什么意思?

  2. %ld代表行格式?%ld中的d是代表什么?

  3. FILELINEVA_ARGS是C调试器的默认替换标记吗?

谢谢

2个回答

5
"

...代表宏接受任意数量的参数。

%ld是一个字符串格式化程序,表示“长十进制”,其中十进制实际上表示整数。

__FILE__扩展为当前文件名

__LINE__扩展为当前行号

__VA_ARGS__扩展为传递给宏的参数。

调试器与此无关。所有这些都是预处理器,除了%ld是字符串格式化。

"

2
  1. ... 表示可以给出任意数量的参数。
  2. %ld 表示 signed long,虽然它有点奇怪,因为我从未见过带符号的行号。
  3. __FILE__ 是当前源文件的文件名。 __LINE__ 是当前行号。 __VA_ARGS__ 是宏所接收到的参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接