找回密码
 注册
搜索
查看: 1870|回复: 20

[讨论] 请教一个有关宏定义的问题

[复制链接]
发表于 2007-1-30 11:07:06 | 显示全部楼层 |阅读模式
哪位高手能指教一下。看看下面这个宏定义在使用时应该如何替代,
要是可以的话请附一个简单的例子吧/
下面是在 MTK平台中的gui_data_types.h中的宏定义。
#define UI_UNUSED_PARAMETER(x)   ((void)(x))
 楼主| 发表于 2007-1-30 11:07:06 | 显示全部楼层 |阅读模式
哪位高手能指教一下。看看下面这个宏定义在使用时应该如何替代,
要是可以的话请附一个简单的例子吧/
下面是在 MTK平台中的gui_data_types.h中的宏定义。
#define UI_UNUSED_PARAMETER(x)   ((void)(x))
发表于 2007-1-30 16:59:30 | 显示全部楼层
#define UI_UNUSED_PARAMETER(x)   ((void)(x))
有什么要解释吗?  就是为了保护x的替代不被符合运算优先级问题带出新的问题而这样设计的  实际上编译器后面会优化的 不用担心出问题   比如经常会有这样的定义:
#ifndef MAX
  #defin MAX(a,b)  ((a)>(b) ? (a) : (b))
#endif //!MAX
这样用括号保护起来是为了使用MAX()时比较灵活,因为a可能是个运算表达式 如MAX(5-2,6*8)
点评回复

使用道具 举报

发表于 2007-1-30 17:12:31 | 显示全部楼层
对了  当然上面#defin MAX(a,b)  ((a)>(b) ? (a) : (b)) 中的a表达式里面不要含有 "变量--"这样的表达式 否则就不能用宏 要用函数来实现了
点评回复

使用道具 举报

 楼主| 发表于 2007-1-30 20:39:34 | 显示全部楼层
你说的我也懂啊。我就是不懂在C语言中有 Void 这个数据类型吗。要是有的话在进行类型强制转化时又有什么作用呢???
点评回复

使用道具 举报

发表于 2007-2-1 09:47:06 | 显示全部楼层
我的理解void类型应该是中转的作用吧   当你要传递一个消息时会统一用到void类型,而当你使用时会根据实际需要去转换成你需要的类型。  这样消息指针一般都用void类型,方便统一。
点评回复

使用道具 举报

 楼主| 发表于 2007-2-1 10:22:25 | 显示全部楼层
这么一讲我就明白了。真是谢谢你了。你也是做MTK的吗。要是话交个朋友吧。我的QQ;312884831[em01]
点评回复

使用道具 举报

发表于 2007-1-30 16:59:30 | 显示全部楼层
#define UI_UNUSED_PARAMETER(x)   ((void)(x))
有什么要解释吗?  就是为了保护x的替代不被符合运算优先级问题带出新的问题而这样设计的  实际上编译器后面会优化的 不用担心出问题   比如经常会有这样的定义:
#ifndef MAX
  #defin MAX(a,b)  ((a)>(b) ? (a) : (b))
#endif //!MAX
这样用括号保护起来是为了使用MAX()时比较灵活,因为a可能是个运算表达式 如MAX(5-2,6*8)
点评回复

使用道具 举报

发表于 2007-1-30 17:12:31 | 显示全部楼层
对了  当然上面#defin MAX(a,b)  ((a)>(b) ? (a) : (b)) 中的a表达式里面不要含有 "变量--"这样的表达式 否则就不能用宏 要用函数来实现了
点评回复

使用道具 举报

 楼主| 发表于 2007-1-30 20:39:34 | 显示全部楼层
你说的我也懂啊。我就是不懂在C语言中有 Void 这个数据类型吗。要是有的话在进行类型强制转化时又有什么作用呢???
点评回复

使用道具 举报

发表于 2007-2-1 09:47:06 | 显示全部楼层
我的理解void类型应该是中转的作用吧   当你要传递一个消息时会统一用到void类型,而当你使用时会根据实际需要去转换成你需要的类型。  这样消息指针一般都用void类型,方便统一。
点评回复

使用道具 举报

 楼主| 发表于 2007-2-1 10:22:25 | 显示全部楼层
这么一讲我就明白了。真是谢谢你了。你也是做MTK的吗。要是话交个朋友吧。我的QQ;312884831[em01]
点评回复

使用道具 举报

发表于 2007-2-28 16:28:10 | 显示全部楼层
yjacky:  你好,联系我的邮件吧,jack47040111@163.com   原来本来有一个qq号码47040111的,结果被盗了,不好意思。
点评回复

使用道具 举报

发表于 2007-3-2 13:21:48 | 显示全部楼层
to JamesCarter,

你的理解不确切,这里是为了消除warning。
void和void *的特性和用法是有很大差别的,请参阅C99。
点评回复

使用道具 举报

发表于 2007-3-23 17:30:31 | 显示全部楼层
erichain:   是的  warning  clean 也是一个方面。
点评回复

使用道具 举报

发表于 2007-3-31 15:49:53 | 显示全部楼层
看来高人真多!
我现在是搞手机软件测试 的,但是我现在正在自己学习手机软件开发,很多都不知道从何下手,如果不嫌弃的话,请收我做徒弟吧^_^我的邮箱:love0413kite@yahoo.com.cn  
qq:173925239
谢谢了,定当后报!
点评回复

使用道具 举报

发表于 2007-4-4 17:07:59 | 显示全部楼层
同上!!
点评回复

使用道具 举报

发表于 2007-4-4 17:08:39 | 显示全部楼层
QQ:13053795
点评回复

使用道具 举报

发表于 2007-5-10 09:27:02 | 显示全部楼层
根据宏定义的字面意思理解就是消除没有使用参数的warning , UI_UNUSED_PARAMETER, 无论是什么类型的参数,都转换成void型的万能类型!
点评回复

使用道具 举报

发表于 2007-5-11 16:00:46 | 显示全部楼层
void 可以看成一个特殊的类型,它用时其实主要是对函数返回值,函数参数的限制,其他用处就没多大意义了,也是不允许的,但作为指针类型它的作用就大了,身份变了嘛,void * 类型的可以看做是一个虚类型,可变类型,会随着环境的改变它的性质也改变,没有自己的主见,标准的变色龙.
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2025-2-24 06:26 , Processed in 0.051927 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表