XCode не может найти метку «ошибка» для PortAudio - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь инициализировать portaudio, как описано в Инициализация учебника PortAudio .

В нем говорится, чтобы проверить, не было ли ошибки во время инициализации, вот так:

PaError err = Pa_Initialize();
if (err != paNoError) goto error;

Какой именно код я использую.

Я запускаю этона OS X Mojave 10.14.4, используя Xcode 10.1 с SDK 10.12 OS X.

Я попытался найти, где метка ошибки в документации PortAudio, но безрезультатно, и в файле нет переменных.named error.

Полная программа на данный момент такова:

# include <iostream>
# include "portaudio.h"
using namespace std;

// Typedef and demo callbacks here.

int main(int argc, const char * argv[])
{
    PaError err = Pa_Initialize();

    if (err != paNoError) goto error;

    // Nothing here yet.

    err = Pa_Terminate();

    if (err != paNoError)
    {
        printf("Port audio error terminating: %s", Pa_GetErrorText(err));
    }
    return 0;
}

Насколько я могу судить в уроке, это должно быть допустимым утверждением, но Xcode показывает синтаксическую ошибку: Use of undeclared label 'error'

1 Ответ

0 голосов
/ 30 марта 2019

При проверке ссылки c ++ для операторов goto примера программы для PortAudio проблема возникла из-за предположения, что goto может получить доступ к вещам, определенным в файле portaudio.h, который не тот случай.

Если у вас возникла эта проблема, я предполагаю, что вы также не знакомы с goto утверждениями.

В руководстве предполагается, что есть раздел основной функции, посвященный устранению ошибок. Чтобы решить эту проблему, нам нужно определить метку ошибки в нашей функции main, которая отвечает за реагирование на ошибки.

Например:

int main(void) {
    PaError err;

    // Checking for errors like in the question code, including goto statement.

    return 1; // If everything above this goes well, we return success.

error:               // Tells the program where to go in the goto statement.
    Pa_Terminate();  // Stop port audio. Important!
    fprintf( stderr, "We got an error: %s/n", Pa_GetErrorMessage(err));
    return err;    
}
...