免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
21 [报告]
发表于 2009-02-11 09:31 |只看该作者
原帖由 太平绅士 于 2009-2-11 09:00 发表


你在说什么?

其实你可以用一个更长的字符串来做一个验证:
sizeof("abcdefgh"+1);这样你看看各大编译器会产生什么样的结果,如果没有没有猜错的话VS系列应该产生的结果为:sizeof("abcdefgh" +1 ) = sizeof("abcdefgh" = 9(VS 2005下已验证);而g++下应该为:sizeof(char *)  = 4 (这个只是我个人的猜测需要验证)。如果我的猜测没有错误的话,那么就证明各大编译器对代码的优化方式是不同的。

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

论坛徽章:
0
22 [报告]
发表于 2009-02-11 09:39 |只看该作者
原帖由 flyingtime 于 2009-2-11 09:31 发表

其实你可以用一个更长的字符串来做一个验证:
sizeof("abcdefgh"+1);这样你看看各大编译器会产生什么样的结果,如果没有没有猜错的话VS系列应该产生的结果为:sizeof("abcdefgh")+1 = 8 + 1 = 9(VS 2005下已 ...


明明就是vs的bug, 怎么变成优化啦
+1让你迷惑了, 可以看看 sizeof( "a" + 100 ) 是多少.

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

论坛徽章:
0
23 [报告]
发表于 2009-02-11 09:54 |只看该作者

回复 #22 太平绅士 的帖子

刚才为什么为“1”我可能写的很模糊,又修改了一下。我认为不是一个bug。
sizeof("a" + 100) 可以认为编译器将其优化为 sizeof ("a") = 2;
不知道这种解释你是否认同。

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

论坛徽章:
0
24 [报告]
发表于 2009-02-11 10:04 |只看该作者
原帖由 flyingtime 于 2009-2-11 09:54 发表
刚才为什么为“1”我可能写的很模糊,又修改了一下。我认为不是一个bug。
sizeof("a" + 100) 可以认为编译器将其优化为 sizeof ("a" + sizeof ((char) 100) = 1 + 1 = 2;
不知道这种解释你是否认同。



是不是应该优化成  sizeof ( "a" ) + sizeof ((char) +100)  
比如 sizeof( "a" - 100 )

论坛徽章:
0
25 [报告]
发表于 2009-02-11 10:10 |只看该作者
哎,你认为(-100)与(+100)在形式上会对(char)(+/- 100)的结果产生影响吗?!

论坛徽章:
0
26 [报告]
发表于 2009-02-11 10:19 |只看该作者
原帖由 flyingtime 于 2009-2-11 10:10 发表
哎,你认为(-100)与(+100)在形式上会对(char)(+/- 100)的结果产生影响吗?!


再比如 sizeof(  "a" + 100 + 50 ) ???

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
27 [报告]
发表于 2009-02-11 10:19 |只看该作者
VS对sizeof("abcde" + 10)之类的好像就是算了sizeof("abcde")

论坛徽章:
0
28 [报告]
发表于 2009-02-11 10:22 |只看该作者
原帖由 hellioncu 于 2009-2-11 10:19 发表
VS对sizeof("abcde" + 10)之类的好像就是算了sizeof("abcde")

我感觉也是这样,不过我还是认为指针比较靠谱

论坛徽章:
0
29 [报告]
发表于 2009-02-11 10:23 |只看该作者
原帖由 hellioncu 于 2009-2-11 10:19 发表
VS对sizeof("abcde" + 10)之类的好像就是算了sizeof("abcde")


没错

论坛徽章:
0
30 [报告]
发表于 2009-02-11 10:27 |只看该作者
我觉的还是结束讨论比较好:
1.毕竟像楼主这样去用sizeof都是比较少的;
2.sizeof作为一个宏在运行时就已经确定了值,没办法从反汇编代码上考虑;
3.我们没有源代码;
4.讨论sizeof这类的应用就像是以前讨论++、--的情况类似;
5.并不保证楼主对sizeof的用法是完全正确的。
还是结束吧,要不然楼主可以给VS研发部发封邮件,看是否能得到一个满意的答复。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP