Objective-c确保var-arg参数的类型和计数正确

时间:2013-06-07 11:39:17

标签: objective-c

在objective-c中,如果你有一个带有变量参数的函数,你如何确保格式说明符与传递给functoin的实际参数一致?

2 个答案:

答案 0 :(得分:26)

这是通过使用NS_FORMAT_FUNCTION宏来完成的。

假设您有这样的功能:

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

级别是日志级别,而格式包含格式字符串,变量参数是格式字符串的参数。

为了确保在编译时参数的计数和类型是正确的,可以将函数定义为:

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

请注意,这里的2和3指的是格式字符串的参数列表中的位置和变量参数列表的开头。

答案 1 :(得分:0)

C默认情况下不会检查。

使用LLVM可以通过宏NS_FORMAT_FUNCTION

检查(强制执行)参数的数量

无法检查参数的类型。它适用于printf,但var_args本身属于任何类型