Объявление функции в функции?

Я имею, столкнулся со следующим кодом и быть новичком C, я приехал сюда для Вашей справки.

Эта функция от c implmentation очереди.

Bool queuePut(Queue *q, char c) 
{
    void beep();

    if (queueFull(q)) 
    {
        beep();
        return false;
    }

    //do stuff

    return true;
}

Так, я получаю странную ошибку с gcc на пустом звуковом сигнале (). Кто-то может объяснить меня, что это, объявление является функцией в функции. Или действительно ли это - пустой звуковой сигнал () просто неуместный? Мне дали этот код и всегда существует возможность, что это не корректно.

Править: Ошибка я добираюсь:

c:/djgpp/tmp/src/ccrjtmBh.o:queue.c:(.text+0x50): undefined reference to
    '_beep'
collect 2: ld returned 1 exit status.

Действительно ли это - связывающаяся ошибка?

5
задан Jonathan Leffler 20 March 2010 в 20:13
поделиться

3 ответа

Скорее всего, у вас ошибка связывания, потому что:

void beep();

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

4
ответ дан 14 December 2019 в 04:35
поделиться

Как отмечали другие, здесь происходит то, что ваша функция объявляет прототип для функции с именем "beep" . Чтобы обойти это, убедитесь, что звуковой сигнал функции включен в вашу компиляцию или компоновку.

Первый шаг - убедиться, что вы компилируете все полученные файлы и связываете все поддерживаемые .lib

Если это не сработает, вы можете просто добавить метод самостоятельно;)

void beep() {
  printf ("beep\n");
}
1
ответ дан 14 December 2019 в 04:35
поделиться

Это необычно, но законно. Ошибка, которую вы видите, может быть связана с компоновщиком, если нигде не определено фактическое значение beep () . Можете ли вы опубликовать фактическую ошибку, которую вы получаете?

3
ответ дан 14 December 2019 в 04:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: