如何从 Swift 中调用名称与结构一致的 C 函数?
How to call a C function from Swift whose name coincides with a structure?
在 C 中,函数和结构有单独的命名空间。模块 Darwin 导出 struct flock
和 func flock
。如果我尝试调用该函数,编译器会将名称解析为结构初始化程序:
let result: Int32 = Darwin.flock(fd, LOCK_EX)
^^^^^
Cannot invoke initializer
for type 'flock' with an argument list
of type '(Int32, Int32)'
如果我尝试通过命名导入手动解析名称,我仍然会收到错误消息:
import func Darwin.flock
^^^^^^^^^^^^
Ambiguous name 'flock' in module 'Darwin'
也没有运气引用函数:
let functionNotStruct: (Int32, Int32) -> Int32 = Darwin.flock
^^^^^^^^^^^^^^^^^^^^^^^
Cannot convert value of type 'flock.Type'
to specified type '(Int32, Int32) -> Int32'
有什么方法可以告诉编译器我想要函数而不是初始化程序?
我无法解释为什么会有所不同,但是省略模块名称使其编译:
// Call `flock()`:
let result = flock(fd, LOCK_EX)
// Use `struct flock`:
var fl = flock()
fl.l_start = 0
在 C 中,函数和结构有单独的命名空间。模块 Darwin 导出 struct flock
和 func flock
。如果我尝试调用该函数,编译器会将名称解析为结构初始化程序:
let result: Int32 = Darwin.flock(fd, LOCK_EX)
^^^^^
Cannot invoke initializer
for type 'flock' with an argument list
of type '(Int32, Int32)'
如果我尝试通过命名导入手动解析名称,我仍然会收到错误消息:
import func Darwin.flock
^^^^^^^^^^^^
Ambiguous name 'flock' in module 'Darwin'
也没有运气引用函数:
let functionNotStruct: (Int32, Int32) -> Int32 = Darwin.flock
^^^^^^^^^^^^^^^^^^^^^^^
Cannot convert value of type 'flock.Type'
to specified type '(Int32, Int32) -> Int32'
有什么方法可以告诉编译器我想要函数而不是初始化程序?
我无法解释为什么会有所不同,但是省略模块名称使其编译:
// Call `flock()`:
let result = flock(fd, LOCK_EX)
// Use `struct flock`:
var fl = flock()
fl.l_start = 0