Объяснение об отсутствующей ошибке прототипа - PullRequest
0 голосов
/ 19 марта 2020

Я получаю следующую ошибку # error cpstm8 main. c отсутствует прототип , но я не понимаю, почему я его получаю, я объявил прототип своей функции на top и эта ошибка все еще продолжается, возможно, я что-то упускаю, код приведен ниже.

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

int * UART1_ReceiveBytes();

void main(void)
{
    while (TRUE)
    {   

        int * p;
        p = UART1_ReceiveBytes();
    }
}

int * UART1_ReceiveBytes()
{
    int i = 0;
    int buf [3] = {0x30, 0x30, 0x30};

    if (UART1_GetFlagStatus(UART1_FLAG_RXNE) != RESET) 
    {
        do
        {
            buf[i] = UART1_ReceiveData8();
            i++;
            delay_ms(10);
        }while(i != 3);

        UART1_ClearFlag(UART1_FLAG_RXNE);
    }
    return buf;
}

Я использую COSMI C в качестве компилятора, так как я программирую STM8. Я следую решению, которое дал @Eraklon (int * UART1_ReceiveBytes (void);) Это решило проблему.

Я хотел бы знать, является ли объявление void только компилятором или есть какое-то конкретное c правило? Большинство примеров, которые я искал, объявили прототип подобным образом (int * UART1_ReceiveBytes ();)

1 Ответ

0 голосов
/ 19 марта 2020

Я хотел бы знать, действительно ли объявление void относится только к компилятору или есть какое-то конкретное c правило? Большинство примеров, которые я искал, объявили прототип подобным образом (int * UART1_ReceiveBytes ();)

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

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

Некоторые компиляторы могут воспринимать их серьезно ( COSMI C), а некоторые компиляторы могут этого не делать ( G CC).

...