第一个跑马灯实验为什么我的LED_Init初始函数前要加上extern才能消失警告?

2019-08-18 18:46发布

#include "stm32f10x.h"
#include "delay.h"
#include "LED.h"

int main(void)
{

extern LED_Init();
delay_init();


while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);

GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);

}


}


今天按照视频学习第一个跑马灯库函数实验,为什么我在编译的时候总是提示main.c(8): warning:  #223-D: function "LED_Init" declared implicitly呢?
而我在LED_init 前面加上extern 以后再编译警告就消失了, 可是我看视频里LED_Init()前面并没有加extern啊?   
求解。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
BMN李
2019-08-18 22:57
你这里加extern仅仅是声明其他C文件(猜是LED.c)里的一个函数,而并非调用了这个函数,所以你这里还没有对LED进行初始化呢。

若是这么做,应该这样:

#include "stm32f10x.h"
#include "delay.h"
#include "LED.h"

int main(void)
{

extern LED_Init();//声明函数
LED_Init();//调用函数
delay_init();


while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);

GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);

}


}

或者这样:

#include "stm32f10x.h"
#include "delay.h"
#include "LED.h"

extern LED_Init();//声明函数

int main(void)
{

LED_Init();//调用函数


while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);

GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);

}


}

若要像视频那样,应该这样:

在LED.h里面声明这个函数,即添加:

extern LED_Init();//声明函数

在main.c里面就可以这样了:

#include "stm32f10x.h"
#include "delay.h"
#include "LED.h"

int main(void)
{

LED_Init();
delay_init();


while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);

GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);

}


}