ios - 如何从 iOS 中的另一个 C 函数访问 C 函数

标签 ios function function-declaration

我正在尝试为 AURenderCallback inputProc 分配一个函数

int setupRemoteIO(audio unit etc){
    inProc.inputProc = playerCallback
}     

但它说 playerCallback 没有在此范围内声明,尽管 playerCallback 存在于与 setupRemoteIO 相同的文件和类中。

播放器回调是这样的

static OSStatus playerCallback(void *inRefCon etc)

可能是什么问题?

最佳答案

在 C 中,您需要在函数首次使用之前声明它,即在文件中比您尝试使用该函数的位置更高的位置。这就是为什么包含文件通常聚集在文件顶部的原因; header 中声明的所有符号都将在包含文件的整个代码中可用。

在这种情况下,这意味着您的回调声明:

static OSStatus playerCallback(void *inRefCon etc);

必须出现在您的 setupRemoteIO() 函数之前,以便编译器在您使用它时知道该函数存在。

由于您使用的是 iOS,我还会指出,在最近的编译器中,此限制并不适用于 Objective-C 方法。它曾经是:你只能使用已经见过的方法选择器。但是在较新版本的 Clang 中,Objective-C 方法可以使用稍后在同一文件中声明的选择器而不会出错。

关于ios - 如何从 iOS 中的另一个 C 函数访问 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10780625/

相关文章:

JavaScript 新函数困惑

c - 函数声明中显式 "extern"关键字的含义/意义是什么?

c - 类型兼容性约定和函数声明

python - 将函数应用于 pandas 列

c - c中的函数参数 '...'表示什么?

ios - MPMoviePlayerController 音频显示 "Done"按钮

ios - 无法使用 Flash Builder 4.6 和 Air4.0 构建 iOS 应用程序

ios - UICollectionViewCell 显示错误的图像

ios - AVMutableComposition 视频开始时为黑色

swift - 交换键和值的字典扩展 - Swift 4.1