| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2450 人关注过本帖
标题:关于C语言中的#define
只看楼主 加入收藏
rr_tm_520
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-3-2
结帖率:33.33%
收藏
已结贴  问题点数:10 回复次数:11 
关于C语言中的#define
      #defined   sys_(offset)  (*(volatile  unsigned long *))  (offset)   


 (*(volatile  unsigned long *))  (offset)   
这个括号里面的内容怎么解释啊??   两个*是什么意思  我一直都不懂这个问题。希望各位高手可以给我详细的指点指点,感激不尽.
搜索更多相关主题的帖子: define C语言 
2010-03-02 23:19
飘在深圳
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2010-2-28
收藏
得分:1 
菜鸟冒一句:是否只是条件编译的一部分,根据后面的程序中是否有#ifdef sys_(offset) 判断.
2010-03-03 01:03
rr_tm_520
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-3-2
收藏
得分:0 
没有#ifdef sys_(offset)
就只有 #defined   sys_(offset)  (*(volatile  unsigned long *))  (offset)
2010-03-03 22:24
鼻涕流流
Rank: 1
等 级:新手上路
帖 子:7
专家分:1
注 册:2010-3-4
收藏
得分:1 
回楼主:#defined应该是#define吧,一般只见过#if defined something或者#define something
很少见过#defined的.也可能是我自己才疏学浅了。我把它理解成#define好了。
那么楼主的说的是这样一个宏定义吧:
#define sys_(offset) (*(volatile unsigned long *))(offset)
......

假设我这样来调用这个宏:sys_(0xb9ff8877);
那么这个宏会被展开成这样:
(*(volatile unsigned long *))(0xb9ff8877);  //1

根据优先级,左边外层的括号最先被解开,变成这样:
*(volatile unsigned long *)(0xb9ff8877);    //2

2的式子就很简单了吧,表示将0xb9ff8877强制转换成指向unsigned long类型的指针,
然后指针访问运算符*再去访问这个指针的内容(也就是0xb9ff8877所指向的内容)。

那么...上面的宏的意思就是这样的:
当这样调用这个宏,
sys_(offset);
表示,先将offset强制转换成指向unsigned long类型的指针,
再去访问offset指向的内容。

很久没这么费劲的解释复杂的C语言表达式了,也不知道上面的解释是否正确(我晃一眼差点没把它误解成定义了某个返回指针的函数指针,汗...)。如果错了,有请达人指出错误之处并赐教,谢绝胡乱拍砖者。



[ 本帖最后由 鼻涕流流 于 2010-3-4 22:23 编辑 ]
2010-03-04 22:05
meqyj
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2010-2-1
收藏
得分:1 
楼上正解,基本上就是这个道理
2010-03-09 15:35
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:1 
(*(volatile  unsigned long *))  (offset)
强制转换offset为类型(volatile  unsigned long *), 并取该地址的内容
2010-03-09 15:40
it的脚本小孩
Rank: 1
等 级:新手上路
帖 子:12
专家分:6
注 册:2007-11-4
收藏
得分:1 
别搞这么复杂的式子了
把自己都搞晕了
2010-03-09 19:32
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:1 
#define sys_(offset) (*(volatile unsigned long *))(offset)


此为带参数的宏定义,
volatile为暂态的,即程序员不能改变他们的值,但是可以通过外部工具对其进行修改。
unsigned long为无符号的长整型
后有4楼正解
2010-03-09 19:33
lz2010
Rank: 1
等 级:新手上路
帖 子:4
专家分:1
注 册:2010-3-2
收藏
得分:1 
,总结的很 不错哈。。。。加油哈。。。。
2010-03-09 22:18
lz2010
Rank: 1
等 级:新手上路
帖 子:4
专家分:1
注 册:2010-3-2
收藏
得分:0 
,呵呵,大家 一起加油吧。。
2010-03-09 22:19
快速回复:关于C语言中的#define
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012369 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved