相关疑难解决方法(0)

将省略号传递给另一个可变参数函数

我有大约30个可变函数.每个人都接受一个路径作为最终参数,例如:

bool do_foo(struct *f, int q, const char *fmt, ...)
Run Code Online (Sandbox Code Playgroud)

在每个函数中,我必须检查扩展格式是否小于或等于特定大小.所以,我发现自己复制/粘贴相同的代码块来检查vsnprintf()没有打印多少个字符,相应地设置并保留errno写入.

我想要做的是编写一个函数来执行此操作,这将返回一个已知为安全大小的静态分配(扩展)字符串,或者在失败时新初始化的字符串,可以针对NULL进行检查.检查还必须确定字符串是绝对路径还是相对路径,这会影响字符串的安全大小.这是很多重复的代码,它开始闻起来.

有没有办法可以将elipsis的内容从我的函数的条目传递给另一个函数?或者我必须先调用va_start(),然后传递va_list给辅助函数?

编辑:

我完全不反对把它传递va_list给帮助者,我只是想确保没有别的东西存在.在我看来,编译器理解可变参数的开始位置,所以我只是好奇我是否可以告诉它传递它们.

c variadic-functions

68
推荐指数
2
解决办法
4万
查看次数

FMDatabase + swift +请求,带有未定义的参数数量

我正在尝试通过Swift类向FMDB发送请求.

这是有效的:

self.database.executeQuery("SELECT * FROM foods WHERE id = ?", withArgumentsInArray:[anID])
Run Code Online (Sandbox Code Playgroud)

因为我使用了executeQuery方法(sql,withArgumentsInArray)

但我不知道如何使用未定义数量的参数的经典方法,而不是具有数组的方法:

self.database.executeUpdate(<#sql: String?#>, withVAList: <#CVaListPointer#>)
Run Code Online (Sandbox Code Playgroud)

我不知道如何在withVAList中编写我的参数.

fmdb swift

6
推荐指数
1
解决办法
4151
查看次数

从Swift调用variadic Objective-C函数

我总结了问题的步骤,我在Objective-C中定义了一个C函数:

ObjC.h

#import <Foundation/Foundation.h>

void cuslog(NSString *format, ...);

@interface ObjC : NSObject

@end
Run Code Online (Sandbox Code Playgroud)

ObjC.m

#import "ObjC.h"

@implementation ObjC

@end

void cuslog(NSString *format, ...)
{
     // Implementation
}
Run Code Online (Sandbox Code Playgroud)

我在Bridging-Header.h中公开了它:

#import "ObjC.h"

// Also tried to put this line in bridging header
void cuslog(NSString *format, ...);
Run Code Online (Sandbox Code Playgroud)

在Swift中,我打算像这样调用函数:

cuslog("Some log")
Run Code Online (Sandbox Code Playgroud)

但错误说:

"Use of unresolved identifier 'cuslog'"
Run Code Online (Sandbox Code Playgroud)

在Swift中调用函数的正确方法是什么?

c objective-c swift

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

标签 统计

c ×2

swift ×2

fmdb ×1

objective-c ×1

variadic-functions ×1