【问题标题】:Objective-c Ensure that var-arg parameters are of the correct type and countObjective-c 确保 var-arg 参数的类型和计数正确
【发布时间】:2013-06-07 11:39:16
【问题描述】:

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

【问题讨论】:

    标签: objective-c


    【解决方案1】:

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

    假设你有这样一个函数:

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

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

    为了确保在编译时参数的数量和类型是正确的,我们将函数定义为:

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

    注意这里的2和3是指格式字符串在参数列表中的位置和可变参数列表的开始。

    【讨论】:

    • 你能在这里解释一下吗?你只解释明显的(你想要的),但也不解释 NS_FORMAT_FUNCTION 参数的使用。这些数字是什么意思?它们意味着什么?
    【解决方案2】:

    默认情况下C也不检查。

    现在: 使用 LLVM,参数的数量和类型都可以通过 CF 宏 NS_FORMAT_FUNCTION 进行检查(强制执行)

    【讨论】:

    • @the downvoters...我不介意被否决(即使我是对的;)但请至少发表评论!
    • NS_FORMAT_FUNCTION 会检查类型。你会看到类似这样的消息:格式指定类型“int”,但参数的类型为 NSString *
    猜你喜欢
    • 2015-12-17
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多