gpt4 book ai didi

c - 允许在 Swift 中使用 C 函数的桥接头失败

转载 作者:可可西里 更新时间:2023-11-01 01:06:00 26 4
gpt4 key购买 nike

我正在尝试使用桥接 header 来允许从 Swift 调用 C 标准库中的 C 函数。

我的项目是一个 Mac OS X 命令行应用程序。我在名为“Bridging-Header.h”的项目中添加了一个头文件。在这个文件中我添加了:

#include < stdio.h>

然后我转到项目build设置,转到“Swift 编译器 - 代码生成”,并将文件名“Bridging-Header.h”添加到标有“Objective-C Bridging Header”的行。

在我的 Swift 文件中,我尝试调用 printf:

import Foundation

var result = printf("Hello")

但是,编译器报告 printf 是一个未解析的标识符。

我做错了什么?我有一个类似的工作流程,使用 ifaddrs.h 中的函数没有问题。

谢谢。

最佳答案

<stdio.h>已包含在 import Foundation 中,所以你不为此需要一个桥接头。

实际问题是

int printf(const char * restrict format, ...);

采用可变参数列表,因此不会导入到 Swift 中。幸运的是,有一个相应的函数接受 va_list导入到 Swift 中:

int vprintf(const char * restrict format, va_list ap);

不幸的是,传递了一个 va_list在 Swift 中有点麻烦,特别是对于字符串。示例:

vprintf("i=%d, x=%f\n", getVaList([12, 34.56]))
// i=12, x=34.560000
vprintf("status=%s\n", getVaList(["OK".cStringUsingEncoding(NSUTF8StringEncoding)]))
// status=OK

请注意,要打印到标准输出,您可以简单地使用 println()String格式化方法:

println(String(format:"i=%d, x=%f, status=%@", 12, 34.56, "OK"))
// i=12, x=34.560000, status=OK

关于c - 允许在 Swift 中使用 C 函数的桥接头失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30140276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com