警告:KEIL

问题描述

在以下代码中,我收到警告“功能'delay'之前没有原型”。

void delay()
{
    for (int i=0;i<100000;i++);
}
    
int main()
{
    RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
    GPIOA->MODER |= GPIO_MODER_MODER5_0;
    
    while(1)
    {
        GPIOA->BSRR |= GPIO_BSRR_BS_5;
        delay();
        GPIOA->BSRR |= GPIO_BSRR_BR_5;
        delay();
    }
}

解决方法

默认情况下,函数具有全局作用域,在这里编译器警告您,没有先前的原型,就有一个定义为全局的函数,也就是说,该函数是可见的或可从另一个转换单元调用(污染名称空间)。

只需将函数声明为静态函数(仅在此文件内部使用):

static void delay(void) { ... }

void delay(void)(具有不确定数量的参数的函数)相比,void delay()(无参数的函数)更喜欢