首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于宏定义的迷惑.该怎么解决

2012-06-13 
关于宏定义的迷惑.....在用单片机编程时,用keil编译C程序,发现下面的一些疑惑:一:宏定义的问题,我在main()

关于宏定义的迷惑.....
在用单片机编程时,用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

这样到底会不会出问题啊?希望各位能够详细解说。

[解决办法]
相同的是可以的 定义成不同的话就不行了
[解决办法]

探讨

相同的是可以的 定义成不同的话就不行了

[解决办法]
在编译选项里面添加设置生成宏展开后文件功能,然后重新编译,查看对应宏展开后.i文件
[解决办法]
一.宏定义所谓的定义 和变量定义不相同,变量定义最后会占用内存空间,而宏定义只是在编译器之前告诉编译器如何进行宏替换(或者其他的条件编译);

二.
C/C++ code
#ifndef XXX#define XXX//你的代码#endif
[解决办法]
宏定义在预处理时完成,不判断对错,只是替换,换个名宏定义,应该也不报错。随便定义。
[解决办法]
gcc -E xxx.c

看宏替换的内容.

热点排行