相关疑难解决方法(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万
查看次数

你如何从Swift调用Objective-C可变方法?

假设我在Objective-c中有一个类,其静态方法如下:

+ (NSError *)executeUpdateQuery:(NSString *)query, ...;
Run Code Online (Sandbox Code Playgroud)

我如何从Swift中调用它?自动完成功能无法识别它,编译器对以下内容不满意:

MyClassName.executeUpdateQuery("")
Run Code Online (Sandbox Code Playgroud)

抱怨'MyClassName.Type没有名为executeUpdateQuery的成员'

objective-c variadic-functions swift

34
推荐指数
2
解决办法
9906
查看次数

变量列表参数

说我有2个功能

void f1(int p1, int v1, ...);
Run Code Online (Sandbox Code Playgroud)

void f2(int v1, ...);
Run Code Online (Sandbox Code Playgroud)

在f1里面我想将所有参数从variadic列表传递给f2:

void f1(int p1, int v1, ...) {
   f2(/*pass all variadic parameters*/);
}
Run Code Online (Sandbox Code Playgroud)

例如,当我打电话时,f1(1, 2, 3, 4, 5) 我希望将2,3,4,5传递给f2

c c++ iphone objective-c

5
推荐指数
1
解决办法
1186
查看次数

如何将"..."(可变长度arg列表)通过我的函数传递给另一个?

旧客户代码:

printf("foo: %d, bar: %s.\n", f, b);
Run Code Online (Sandbox Code Playgroud)

我想用以下内容替换printf(&100的其他人喜欢)

my_printf(ctrl1, ctrl2, "foo: %d, bar: %s.\n", f, b);
Run Code Online (Sandbox Code Playgroud)

my_printf的实现

void my_printf(CtrlT1 c1, Ctrl c2, char* fmt, ...) {
/* Do stuff with c1 & c2 */
   fprintf(log, fmt, **WHAT_GOES_HERE**);
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的

似乎应该有一种简单,直接的方法将与...through 相关的参数列表传递给fprintf.我试过,fprintf(log, fmt, ...);但编译器抱怨说,"'''令牌之前的语法错误".

我也尝试过: va_list ap; va_start(ap, fmt); fprintf(log, fmt, ap);

使用va_list的调用可以编译甚至运行而不会进行核化,但是传递给printf的内容显然与传入函数的内容不同...,可以通过输出(非打印字符的表示)来判断.

如果推动推进,我可能会通过蛮力走过va_list的内容,但这似乎很愚蠢.是否没有简单的令牌或语法来传递它...

c

0
推荐指数
1
解决办法
199
查看次数

标签 统计

c ×3

objective-c ×2

c++ ×1

iphone ×1

swift ×1

variadic ×1

variadic-functions ×1