| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 693 人关注过本帖
标题:宏展开的问题,闲聊 非正式提问
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:20 回复次数:10 
宏展开的问题,闲聊 非正式提问
程序代码:
#include<stdio.h>
#define S(x) x*x
int main()
{
    int k=3,m=2;
    double a=9.0;
    a/=S(k+m)/S(k+m);
    //提问 这里的S(k+m)/S(k+m) 应该等于多少啊
    //貌似 3*3+2/3*3+2=11啊 但是实际根据下面的printf 逆推的话 应该等于17 不知道咋来滴
    //尝试用ida抓一下代码  确发现编译器直接把这个东东变成了一个数字
    printf("%f",(double)a);
} 
搜索更多相关主题的帖子: include double 编译器 
2013-03-14 10:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
看看

授人以渔,不授人以鱼。
2013-03-14 11:16
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:0 
学习帮顶

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2013-03-14 11:43
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 





.
2013-03-14 11:56
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:20 
以下是引用wp231957在2013-3-14 10:59:37的发言:

#include
#define S(x) x*x
int main()
{
    int k=3,m=2;
    double a=9.0;
    a/=S(k+m)/S(k+m);
    //提问 这里的S(k+m)/S(k+m) 应该等于多少啊
    //貌似 3*3+2/3*3+2=11啊 但是实际根据下面的printf 逆推的话 应该等于17 不知道咋来滴
    //尝试用ida抓一下代码  确发现编译器直接把这个东东变成了一个数字
    printf("%f",(double)a);
}

展开是 a/=k+m*k+m/k+m*k+m;

变成数字是因为开了编译优化? 你O0不优化看看
2013-03-14 12:10
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
程序代码:
0x00000000004004fc <main+0>:   push   rbp
0x00000000004004fd <main+1>:   mov    rbp,rsp
0x0000000000400500 <main+4>:   sub    rsp,0x20
0x0000000000400504 <main+8>:   mov    DWORD PTR [rbp-0x4],0x3
0x000000000040050b <main+15>:  mov    DWORD PTR [rbp-0x8],0x2
0x0000000000400512 <main+22>:  movabs rax,0x4022000000000000
0x000000000040051c <main+32>:  mov    QWORD PTR [rbp-0x10],rax
0x0000000000400520 <main+36>:  mov    eax,DWORD PTR [rbp-0x8]
0x0000000000400523 <main+39>:  add    eax,0x1
0x0000000000400526 <main+42>:  mov    ecx,eax
0x0000000000400528 <main+44>:  imul   ecx,DWORD PTR [rbp-0x4]
0x000000000040052c <main+48>:  mov    eax,DWORD PTR [rbp-0x8]
0x000000000040052f <main+51>:  mov    edx,eax
0x0000000000400531 <main+53>:  sar    edx,0x1f
0x0000000000400534 <main+56>:  idiv   DWORD PTR [rbp-0x4]
0x0000000000400537 <main+59>:  lea    edx,[rcx+rax*1]
0x000000000040053a <main+62>:  mov    eax,DWORD PTR [rbp-0x8]
0x000000000040053d <main+65>:  imul   eax,DWORD PTR [rbp-0x4]
0x0000000000400541 <main+69>:  add    edx,eax
0x0000000000400543 <main+71>:  mov    eax,DWORD PTR [rbp-0x8]
0x0000000000400546 <main+74>:  add    eax,edx
0x0000000000400548 <main+76>:  cvtsi2sd xmm0,eax
0x000000000040054c <main+80>:  movsd  xmm1,QWORD PTR [rbp-0x10]
0x0000000000400551 <main+85>:  movapd xmm2,xmm1
0x0000000000400555 <main+89>:  divsd  xmm2,xmm0
0x0000000000400559 <main+93>:  movapd xmm0,xmm2
0x000000000040055d <main+97>:  movsd  QWORD PTR [rbp-0x10],xmm0
0x0000000000400562 <main+102>: mov    rax,QWORD PTR [rbp-0x10]
0x0000000000400566 <main+106>: mov    QWORD PTR [rbp-0x18],rax
0x000000000040056a <main+110>: movsd  xmm0,QWORD PTR [rbp-0x18]
0x000000000040056f <main+115>: mov    edi,0x400634
0x0000000000400574 <main+120>: mov    eax,0x1
0x0000000000400579 <main+125>: call   0x4003e0 <printf@plt>
0x000000000040057e <main+130>: mov    eax,0x0
0x0000000000400583 <main+135>: leave
0x0000000000400584 <main+136>: ret 


好优雅啊 可惜windows因为兼容性问题还是得用32位的。。。
2013-03-14 12:16
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
上面的是O0 这个是O2
程序代码:
0x0000000000400410 <main+0>:  sub    rsp,0x8
0x0000000000400414 <main+4>:  mov    edi,0x4005c4
0x0000000000400419 <main+9>:  mov    eax,0x1
0x000000000040041e <main+14>: movsd  xmm0,QWORD PTR [rip+0x1a2]        # 0x4005c8
0x0000000000400426 <main+22>: call   0x4003e0 <printf@plt>
0x000000000040042b <main+27>: xor    eax,eax
0x000000000040042d <main+29>: add    rsp,0x8
0x0000000000400431 <main+33>: ret 

2013-03-14 12:17
小习小习
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:6
帖 子:1467
专家分:4792
注 册:2012-7-2
收藏
得分:0 
膜拜大神

实现自己既定的目标,必须能耐得住寂寞单干。
2013-03-14 12:49
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
xue xi

梅尚程荀
马谭杨奚







                                                       
2013-03-14 13:09
party620
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:696
专家分:2521
注 册:2013-1-31
收藏
得分:0 
学习!!!
2013-03-14 13:51
快速回复:宏展开的问题,闲聊 非正式提问
数据加载中...
 
   



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

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