美文网首页
关于va_arg宏的用法

关于va_arg宏的用法

作者: _RG | 来源:发表于2018-08-31 10:58 被阅读0次

当我们的方法或者函数需要传入多个不确定参数时, 我们一般使用,...的形式表示,当要取传入的参数的值时就需要用到va_arg宏去取


- (void)viewDidLoad {
    [super viewDidLoad];
    [self testMethod:@"999",@"dsd",[Person new]];
}


- (void)testMethod:(NSString *)test,...{
    
    va_list argList;
    va_start(argList, test);
    {
        NSLog(@"id = %@",va_arg(argList, id));
        NSLog(@"id = %@",va_arg(argList, id));
    }
    va_end(argList);
}

可以看到打印的结果为

2018-08-31 10:46:06.729580+0800 003TEST[2212:79126] id = dsd
2018-08-31 10:46:06.729722+0800 003TEST[2212:79126] id = <Person: 0x60800000ed20>

因此可以知道, va_arg取参数是从第二个开始取的,如果继续取值打印,则会崩溃,报空指针异常。

一般通常写法是传入参数时,最后一个参数设置为nil, 然后可循环遍历到nil时结束


- (void)viewDidLoad {
    [super viewDidLoad];
    [self testMethod:@"999",@"dsd",[Person new],nil];
}


- (void)testMethod:(NSString *)test,...{
    
    va_list argList;
    va_start(argList, test);
    {
        for (id params = test; params != nil; params = va_arg(argList, id)){
            
            NSLog(@"id = %@---class = %@",params,NSStringFromClass([params class]));
        }
    }
    va_end(argList);
}

打印结果为

2018-08-31 10:56:42.473372+0800 003TEST[2445:89009] id = 999---class = __NSCFConstantString
2018-08-31 10:56:42.473502+0800 003TEST[2445:89009] id = dsd---class = __NSCFConstantString
2018-08-31 10:56:42.473621+0800 003TEST[2445:89009] id = <Person: 0x608000006bf0>---class = Person

相关文章

  • 关于va_arg宏的用法

    当我们的方法或者函数需要传入多个不确定参数时, 我们一般使用,...的形式表示,当要取传入的参数的值时就需要用到v...

  • C语言可变参数

    要用到的定义和宏 va_list va_start va_arg va_end 具体用法参照下边代码实例 代码实例

  • C传递可变参数

    C传递可变参数 va_list   va_list配合va_start/va_arg/va_end宏定义, 可以完...

  • ios开发-Object-C可变参数函数

    这个函数主要是用来计算用户传进来的数值之和。 va_list:用来保存宏 va_start 、va_arg 和 v...

  • IOS宏用法

    iOS宏的经典用法Apple的习惯attribute iOS宏的经典用法1.常量宏、表达式宏 define kTa...

  • ##宏与const

    宏与const 宏与const 的使用: 宏的用法: 一般字符串抽成宏,代码抽成宏使用。 const用法:一般常用...

  • 1.#与##的用法 资料: ##连接符和#符的使用 2.宏的注意事项 关于宏##的使用注意一点短小精悍的宏

  • iOS 测试类

    有用的宏 异步用法

  • iOS 面试知识总结

    1.iOS define和const的区别 宏的用法:一般字符串抽成宏,代码抽成宏使用。const用法:一般常用的...

  • RAC中必须要知道的宏

    高端宏用法大神博客

网友评论

      本文标题:关于va_arg宏的用法

      本文链接:https://www.haomeiwen.com/subject/sscswftx.html