【发布时间】:2013-06-07 11:39:16
【问题描述】:
在objective-c中,如果你有一个函数接受可变参数,那么你如何确保格式说明符与传递给函数的实际参数一致?
【问题讨论】:
标签: objective-c
在objective-c中,如果你有一个函数接受可变参数,那么你如何确保格式说明符与传递给函数的实际参数一致?
【问题讨论】:
标签: objective-c
这是通过使用 NS_FORMAT_FUNCTION 宏来完成的。
假设你有这样一个函数:
LOG(int level,NSString *format,...);
级别是日志级别,格式包含格式字符串,变量参数是格式字符串的参数。
为了确保在编译时参数的数量和类型是正确的,我们将函数定义为:
LOG(int level,NSString *format,...) NS_FORMAT_FUNCTION(2,3);
注意这里的2和3是指格式字符串在参数列表中的位置和可变参数列表的开始。
【讨论】:
默认情况下C也不检查。
现在:
使用 LLVM,参数的数量和类型都可以通过 CF 宏 NS_FORMAT_FUNCTION 进行检查(强制执行)
【讨论】: