打印

关于单片机模块化编程

[复制链接]
2047|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
buguoer|  楼主 | 2013-5-4 23:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么在每个C程序文件开头加个“#define 文件名_GLOBAL”,如,#define MAIN_GLOBAL,
宏定义不是应该#define后有两个字符名吗? 像#define uchar unsigned char

还有每个头文件中,红色那部分具体怎么理解?
#ifndef __ADC_H__
#define __ADC_H__

#ifdef ADC_GLOBAL
#define ADC_EXTERN
#else
#define ADC_EXTERN extern
#endif


#define SYSTEM_VDD        5.0
#define VREF            2.500
#define AD_P                (VREF/4096.0)

相关帖子

沙发
创皇者| | 2013-5-4 23:49 | 只看该作者

使用特权

评论回复
板凳
创皇者| | 2013-5-4 23:49 | 只看该作者
回帖是美德。。。

使用特权

评论回复
地板
lyncxy119| | 2013-5-5 18:05 | 只看该作者
预编译

使用特权

评论回复
5
SunFans| | 2013-5-12 15:59 | 只看该作者
建议找本编程规范方面的书看看吧……

使用特权

评论回复
6
ZhangStudy| | 2013-5-12 18:23 | 只看该作者
防止头文件被包含两次

使用特权

评论回复
7
amwrdfe| | 2013-5-12 19:21 | 只看该作者
#ifdef ADC_GLOBAL // 如果定义了ADC_GLOBAL
#define ADC_EXTERN  //则定义 ADC_EXTERN
#else // 否则
#define ADC_EXTERN extern //定义ADC_EXTERN extern
#endif // 如果结束

使用特权

评论回复
8
江枫渔火| | 2013-5-12 21:37 | 只看该作者
基本上,是楼上所说的道理,
首先,定义宏可以没有后面的部分,这时候,这个宏就是空的,但是它能表示 定义过,和没定义过的区别。
其次再这里的这种方式,可以参考 uCOS-II中文版电子书.pdf 里面所讲解的。

使用特权

评论回复
9
jiegex| | 2013-5-13 13:05 | 只看该作者
#ifndef XXXX
#define XXXX
....这个结构防止一个文件被包含多次
#endif

#ifdef XXXX
#define YYYY
#else
#define YYYY ZZZZ
#endif
这个结构存在于某个模块的头文件中
当这个模块的C文件包含这个头文件之前,define XXXX
其他模块引用这个文件的时候,什么都不去定义,结果导致#define YYYY ZZZZ,从而引入了外部变量或者外部函数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

21

帖子

1

粉丝