相关疑难解决方法(0)

在C中转发可变参数函数的调用

在C中,是否可以转发可变参数函数的调用?如,

int my_printf(char *fmt, ...) {
    fprintf(stderr, "Calling printf with fmt %s", fmt);
    return SOMEHOW_INVOKE_LIBC_PRINTF;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,以上述方式转发调用显然不是必需的(因为你可以用其他方式记录调用,或者使用vfprintf),但是我正在处理的代码库要求包装器做一些实际的工作,并且没有没有(并且不能添加)类似于vfprintf的辅助函数.

[更新:基于迄今为止提供的答案,似乎存在一些混淆.用另一种方式表达问题:通常,你可以包装一些任意的可变参数函数而不修改该函数的定义.

c variadic

176
推荐指数
6
解决办法
6万
查看次数

Objective-C传递... nil终止参数列表

...在ObjectiveC中遇到一些问题.

我基本上包装一个方法,并希望接受一个nil终止列表,并直接将相同的列表传递给我正在包装的方法.

这是我的,但它会导致EXC_BAD_ACCESS崩溃.检查当地的变量,它似乎otherButtonTitles只是一个NSString传入的时间otherButtonTitles:@"Foo", nil]

+ (void)showWithTitle:(NSString *)title
              message:(NSString *)message
             delegate:(id)delegate
    cancelButtonTitle:(NSString *)cancelButtonTitle
    otherButtonTitles:(NSString *)otherButtonTitles, ...
{
    UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:title
                                                     message:message
                                                    delegate:delegate
                                           cancelButtonTitle:cancelButtonTitle
                                           otherButtonTitles:otherButtonTitles] autorelease];
    [alert show];
}
Run Code Online (Sandbox Code Playgroud)

我如何简单地从参数传出到传出参数,从而保留完全相同的nil终止列表?

objective-c variadic

20
推荐指数
1
解决办法
8648
查看次数

如何使用va_args传递参数(可变参数,省略号)

我无法理解Objective-C中多个参数的语法.我已经看到了这个问题,但答案并没有帮助我(还).

这是我的代码(实际上我希望最终传递给NSString stringWithFormat,但是让NSLog工作现在已经足够了):

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
     // Insert code here to initialize your application 
     [self log:@"blah blah %d", 32];
}


- (void)log:(NSString *)text, ... {
      va_list args;
      va_start(args, text);
      NSLog(text, args);
}
Run Code Online (Sandbox Code Playgroud)

参数(或一些参数)通过,但它有一些奇怪的值(输出是blah blah 1606412704).我应该如何传递通过的值...

objective-c

9
推荐指数
2
解决办法
5233
查看次数

标签 统计

objective-c ×2

variadic ×2

c ×1