关于宏定义的迷惑.....
在用单片机编程时,用keil编译C程序,发现下面的一些疑惑:
一:宏定义的问题,我在main()函数前,重复定义了同样的宏,居然能编译过去。如下:
#include <REGX52.H>
#define uint unsigned int
#define uint unsigned int
void main()
{
.............
}
为什么宏变量重复定义能编译过去?而其他变量,比如全局变量,局部变量重复定义会出错。如:
void main()
{
unsigned int a;
unsigned int a;
}
这样就编译不过去了。。。。。。。。。。
二、关于头文件包含的问题
我在main()函数重复包含了I2C.h头文件,如:
#include "I2C.h"
#include "I2C.h"
,但是的话,这样同样都能编译过去。注意,我是尝试把
预编译条件#ifndef __I2C_H__
#define _I2C_H__
.。。。。。。。。。。。。
#endif
注销掉的,如下面的代码
//#ifndef __I2C_H__
//#define__I2C_H__
extern void I2c_Init();
extern void Start_I2c();
extern void Stop_I2c();
extern void Respons();
extern void SendByte(unsigned date);
extern unsigned char ReceByte();
extern void Ack_I2c(bit b);
extern void writeadd(unsigned address,unsigned date);
extern unsigned char readadd(unsigned address);
//#endif
这样到底会不会出问题啊?希望各位能够详细解说。
[解决办法]
相同的是可以的 定义成不同的话就不行了
[解决办法]
#ifndef XXX#define XXX//你的代码#endif
[解决办法]
宏定义在预处理时完成,不判断对错,只是替换,换个名宏定义,应该也不报错。随便定义。
[解决办法]
gcc -E xxx.c
看宏替换的内容.