打印
[ARM9、LPC]

宏定义的理解

[复制链接]
1305|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yy_ever|  楼主 | 2015-3-6 17:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
mazhao141| | 2015-3-6 18:40 | 只看该作者
是个表达式

使用特权

评论回复
板凳
airwill| | 2015-3-7 08:40 | 只看该作者
我在 KEIL mdk 带优化的情况下编译, 这类情况都是直接给出表达式的结果(常数)

使用特权

评论回复
地板
chenyu988| | 2015-3-7 08:56 | 只看该作者
个人觉得是表达式

使用特权

评论回复
5
zh_sl| | 2015-3-7 13:29 | 只看该作者
这情况应该是(0x12345678>>24)常数,低8位取整

使用特权

评论回复
6
兰天白云| | 2015-3-7 15:36 | 只看该作者
看看编译后的汇编是什么就知道了

使用特权

评论回复
7
dirtwillfly| | 2015-3-7 17:24 | 只看该作者
要看编译器的优化情况吧

使用特权

评论回复
8
keen123| | 2015-3-8 21:42 | 只看该作者
真要分辨的话个人认为是表达式,更为严谨,运行的时候,
#define        B        (A>>24) 此处还不是赋值运算,没有计算结果,只是预先告之程序  B 可以用表达式 (A>>24)替换,不是赋值等于,
#define        A        (0X12345678),后面的数字只是一个常量,不是结果
我觉得理论上应该是这样,未考虑编译环境。

使用特权

评论回复
9
yy_ever|  楼主 | 2015-3-9 08:19 | 只看该作者

谢谢,个人通过汇编的看到的结果是这样理解的,应该是个表达式,但这是个常数的表达式0X12345678>>24,这里面都是常数,完成赋值操作,只需要一个机器周期,所以无论是表达式还是直接赋值,本身执行意义是一样的。

使用特权

评论回复
10
yy_ever|  楼主 | 2015-3-9 08:20 | 只看该作者
airwill 发表于 2015-3-7 08:40
我在 KEIL mdk 带优化的情况下编译, 这类情况都是直接给出表达式的结果(常数) ...

谢谢,我个人通过汇编的看到的结果是这样理解的,应该是个表达式,但这是个常数的表达式0X12345678>>24,这里面都是常数,完成赋值操作,只需要一个机器周期,所以无论是表达式还是直接赋值,本身执行意义是一样的。

使用特权

评论回复
11
yy_ever|  楼主 | 2015-3-9 08:20 | 只看该作者
chenyu988 发表于 2015-3-7 08:56
个人觉得是表达式

谢谢,我个人通过汇编的看到的结果是这样理解的,应该是个表达式,但这是个常数的表达式0X12345678>>24,这里面都是常数,完成赋值操作,只需要一个机器周期,所以无论是表达式还是直接赋值,本身执行意义是一样的。

使用特权

评论回复
12
yy_ever|  楼主 | 2015-3-9 08:21 | 只看该作者
zh_sl 发表于 2015-3-7 13:29
这情况应该是(0x12345678>>24)常数,低8位取整

谢谢,我个人通过汇编的看到的结果是这样理解的,应该是个表达式,但这是个常数的表达式0X12345678>>24,这里面都是常数,完成赋值操作,只需要一个机器周期,所以无论是表达式还是直接赋值,本身执行意义是一样的。

使用特权

评论回复
13
yy_ever|  楼主 | 2015-3-9 08:21 | 只看该作者
兰天白云 发表于 2015-3-7 15:36
看看编译后的汇编是什么就知道了

谢谢,我个人通过汇编的看到的结果是这样理解的,应该是个表达式,但这是个常数的表达式0X12345678>>24,这里面都是常数,完成赋值操作,只需要一个机器周期,所以无论是表达式还是直接赋值,本身执行意义是一样的。

使用特权

评论回复
14
yy_ever|  楼主 | 2015-3-9 08:21 | 只看该作者
keen123 发表于 2015-3-8 21:42
真要分辨的话个人认为是表达式,更为严谨,运行的时候,
#define        B        (A>>24) 此处还不是赋值 ...

谢谢,我个人通过汇编的看到的结果是这样理解的,应该是个表达式,但这是个常数的表达式0X12345678>>24,这里面都是常数,完成赋值操作,只需要一个机器周期,所以无论是表达式还是直接赋值,本身执行意义是一样的。

使用特权

评论回复
15
ayb_ice| | 2015-3-9 15:37 | 只看该作者
宏是替换功能

使用特权

评论回复
16
john_lee| | 2015-3-9 23:22 | 只看该作者
常量表达式而已,表达式的求值计算是由编译器进行,术语称为“常量叠算(constant folding)”。
“宏”和“表达式”是两个完全不相关的概念。

使用特权

评论回复
17
myxiaonia| | 2015-3-14 13:08 | 只看该作者
airwill 发表于 2015-3-7 08:40
我在 KEIL mdk 带优化的情况下编译, 这类情况都是直接给出表达式的结果(常数) ...

我估计不开优化都是计算结果。。。。

使用特权

评论回复
18
戈卫东| | 2015-3-17 16:34 | 只看该作者
编译器做优化的话,会直接是常数(结果)

使用特权

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

本版积分规则

44

主题

94

帖子

0

粉丝