0

我收到以下错误#error cpstm8 main.c missing prototype,但我不明白的是我收到它的原因,我在顶部声明了我的函数的原型,这个错误仍然不断发生,也许我是缺少一些东西,代码如下。

在我的代码中,我想收集来自 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;
}

我正在使用 COSMIC 作为编译器,因为我正在编程 STM8 我遵循@Eraklon 给出的解决方案 (int * UART1_ReceiveBytes(void);) 这解决了问题。

我想知道声明 void 是否只是关于编译器还是有一些特定的规则?我正在查看的大多数示例都声明了这样的原型 (int * UART1_ReceiveBytes();)

4

1 回答 1

0

我想知道声明 void 是否只是关于编译器还是有一些特定的规则?我正在查看的大多数示例都声明了这样的原型 (int * UART1_ReceiveBytes();)

这是一个依赖于编译器的情况,在 GCC 编译器中它不会显示任何错误,它只是忽略它们。

在函数原型中包含“ void ”将指定调用函数时不应传递任何参数。错误地,如果程序员传递了任何参数,在编译阶段它会检查原型并抛出一个错误,指出“函数不应包含参数”。

一些编译器可能会认真对待它们(COSMIC),而一些编译器可能不会(GCC)。

于 2020-03-19T10:32:26.400 回答