佚名通过本文主要向大家介绍了keil4下载程序,keil4调试程序,keil4如何调试程序,keil4程序,keil4怎么调试程序等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: keil4编译多头文件程序时重复定义怎么办?
描述:
以前一直把所有程序和声明写在同一个c文件里,
后来被指导,不同模块可以分开编写,方便区分和再利用,
每个模块(如按键,AD,液晶)包括一个c文件和一个h文件,
但是编写过程中发现,不同c文件会共用同一个函数或变量,
这时,如果分别声明、定义,会警告重复定义,
如果只定义一遍,因为多处调用,又会警告函数或变量未定义,
所以不知道到底该怎样编写才能避免这个问题?
今天偶然发现本论坛,觉得很厉害,有很多不懂,求大神解答
解决方案1:
描述:
keil4单片机c
初学51单片机,以前一直把所有程序和声明写在同一个c文件里,
后来被指导,不同模块可以分开编写,方便区分和再利用,
每个模块(如按键,AD,液晶)包括一个c文件和一个h文件,
但是编写过程中发现,不同c文件会共用同一个函数或变量,
这时,如果分别声明、定义,会警告重复定义,
如果只定义一遍,因为多处调用,又会警告函数或变量未定义,
所以不知道到底该怎样编写才能避免这个问题?
今天偶然发现本论坛,觉得很厉害,有很多不懂,求大神解答

解决方案1:
善用宏定义
#ifndef __GPS_SR87_H
#define __GPS_SR87_H
//--------------------------------
// Includes
//--------------------------------
#include "Stm32_Init.h"
//--------------------------------
// Private typedef
//--------------------------------
//--------------------------------
// Private define
//--------------------------------
#define GPS_RECV_DATA(addr) USART1_RecvData(addr)
#define GPS_SEND_DATA(data,len) USART3_SendData(data, len)
//--------------------------------
// Private macro
//--------------------------------
//--------------------------------
// Private variables
//--------------------------------
//--------------------------------
// Private function prototypes
//--------------------------------
void ChkGpsData(void);
void SendGpsData(void);
#endif // __GPS_SR87_H