Как получить доступ к функции C из другой функции C в iOS

Я пытаюсь назначить функцию для AURenderCallback inputProc

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

но он говорит, что playerCallback не объявлен в этой области, хотя playerCallback присутствует в том же файле и классе, что и setupRemoteIO.

Обратный звонок игрока выглядит так

static OSStatus playerCallback(void *inRefCon etc)

В чем может быть проблема?

1 ответ

Решение

В C вам необходимо объявить функцию перед ее первым использованием, т.е. выше в файле, чем точка, в которой вы пытаетесь использовать функцию. Вот почему включаемые файлы обычно сгруппированы в верхней части файла; все символы, объявленные в заголовках, будут доступны по всему коду во включаемом файле.

В этом случае это означает объявление вашего обратного вызова:

static OSStatus playerCallback(void *inRefCon etc);

должен появиться перед вашим setupRemoteIO() функция, чтобы компилятор знал, что функция существует, когда вы ее используете.

Поскольку вы работаете на iOS, я также отмечу, что в последних компиляторах это ограничение не распространяется на методы Objective-C. Раньше: вы могли использовать только те селекторы методов, которые уже были видны. Но в более новых версиях Clang метод Objective-C может использовать селектор, объявленный позже в том же файле, без ошибок.

Другие вопросы по тегам