问题描述
在以下代码中,我收到警告“功能'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()
(无参数的函数)更喜欢