一个宏定义不理解
在Keil C51的absacc.h头文件中有CBYTE,DBYTE等宏定义为:
#define CBYTE ((unsigned char volatile code*) 0)
#define DBYTE ((unsigned char volatile data*) 0)
用法:CBYTE[0x0002];
---------------------
这怎么理解啊?
问题点数:20、回复次数:3Top
1 楼LeeAn(蝎子)回复于 2006-05-04 22:49:48 得分 0
单片机高级语言C51Windows环境编程与应用
第284页
CBYTE---CODE区
DBYTE---DATA区
PBYTE---XDATA区(MOVX @Ri)
XBYTE---XDATA区(MOVX @DPTR)
Top
2 楼ytruyutyrruyuryyu()回复于 2006-05-05 00:31:18 得分 0
回楼上:
我知道它们的用处,只是看不懂这些宏的定义,比如说:
CBYTE[0x0002]
展开后应该为:
((unsigned char volatile code*) 0)[0x0002]
这替换后的表达是什么意思啊?
Top
3 楼icesnows(逝去日子)回复于 2006-05-07 19:22:22 得分 20
我的观点是这样的,首先
((unsigned char volatile code*) 0)定义了一个指针,指向了code区的0地址,至于unsigned char表示是无符号字符类型,volatile表示数据易变,就是语法上的事咯
而我们知道C里面数组跟指针实际上是一样的,也就是说指针应该也可以当做数组来用,那么CBYTE[0x0002]就应该访问到CODE区0x0002地址,你可以看一下反汇编后的结果应该就知道了Top




