免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 太平绅士
打印 上一主题 下一主题

遇到恶心的事情了, sizeof( "a" + 1 ) 为多少?  关闭 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2009-02-11 10:32 |只看该作者
原帖由 flyingtime 于 2009-2-11 10:27 发表
我觉的还是结束讨论比较好:
1.毕竟像楼主这样去用sizeof都是比较少的;
2.sizeof作为一个宏在运行时就已经确定了值,没办法从反汇编代码上考虑;
3.我们没有源代码;
4.讨论sizeof这类的应用就像是以前讨论 ...


已经确定的值无须优化, ok, 结束讨论.

论坛徽章:
0
32 [报告]
发表于 2009-02-11 10:39 |只看该作者
可能是我用词不当吧,我这里说的“优化”是指:编译器对程序员的代码做出一个合理的解释,而并非在性能上的那种“优化”。。。引入了一个引起歧义的词,请大家谅解

论坛徽章:
0
33 [报告]
发表于 2009-02-11 10:44 |只看该作者
**

[ 本帖最后由 太平绅士 于 2009-2-11 10:52 编辑 ]

论坛徽章:
0
34 [报告]
发表于 2009-02-11 10:58 |只看该作者
是不是把 "a"+1变成"b",然后计算sizeof("b")

论坛徽章:
0
35 [报告]
发表于 2009-02-11 11:24 |只看该作者
刚才又从新看了一下。。。刚才我对sizeof("a")的值计算错误。。。前面的已经修改过了
其中一些人认为VS系列可能只考虑sizeof中第一个出现的值:
sizeof("a" + 1) = sizeof("a") = 2;
sizeof(1 + "a") = sizeof(1) = 4;
上面的两种情况可以认为是这样的,但是
sizeof(1 + "abcdefghi") = 10;即 sizeof取了一个MaxSize,
另外sizeof(0.1 + "a")就会出现编译错误"error C2111: '+' : pointer addition requires integral operand",说明VS不是简单的将sizeof((typeA)X + (typeB)Y) = sizeof((typeA)X)或是sizeof((typeA)X + (typeB)Y) = sizeof((typeA)X) > sizeof((typeB)Y) : sizeof((typeA)X) ? sizeof((typeB)Y),至于VS到底是怎样理解sizeof还需要VS开发人员的证实。

[ 本帖最后由 flyingtime 于 2009-2-11 11:36 编辑 ]

论坛徽章:
0
36 [报告]
发表于 2009-02-11 13:01 |只看该作者
无意义

论坛徽章:
0
37 [报告]
发表于 2009-02-11 13:20 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
38 [报告]
发表于 2009-02-11 13:29 |只看该作者
写这种sx程序的人让我看到,立马开除

论坛徽章:
0
39 [报告]
发表于 2009-02-11 13:46 |只看该作者
原帖由 aple_smx 于 2009-2-11 13:20 发表
不知道你写这个帖子的初衷是什么?
是要讨论sizeof的实现?还是...

另,sizeof("a"+1)你是怎么想到的?是程序的一个bug还是拍脑子拍出来的呢?


只是原先想写个宏,其中参数可能是 常量字符串, 也可能是int,
为方便起见,希望这个宏能自动的判别出是字符串还是int (要求兼容C),
于是试验下能否通过某种技巧达到目标,比如sizeof之类的。 结果意外试验出这个bug.

遗憾的是,最终我不得不分两个宏写,未能达成目标。

[ 本帖最后由 太平绅士 于 2009-2-11 13:48 编辑 ]

论坛徽章:
0
40 [报告]
发表于 2009-02-11 13:47 |只看该作者
原帖由 celise 于 2009-2-11 13:29 发表
写这种sx程序的人让我看到,立马开除


关于sx, 请你刷刷牙再来,
我是太低调了,还是太好欺负了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP