免费注册 查看新帖 |

Chinaunix

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

case的分段匹配(我找了很久了) [复制链接]

论坛徽章:
0
21 [报告]
发表于 2004-10-22 14:44 |只看该作者

case的分段匹配(我找了很久了)

我没试,只是看书,

晚上回家试了再说吧。

论坛徽章:
0
22 [报告]
发表于 2004-10-22 15:55 |只看该作者

case的分段匹配(我找了很久了)

记得_attribute_ (())可以用在内存对齐上。。。。。。。
环境:rh9.0 默认gcc编译器。
gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)


  1. struct test {
  2.         int i;
  3.         char a[1];
  4. }__attribute__((aligned(16)));/*参数为2的n次方*/

  5. main()
  6. {
  7.         printf("sizeof(test):%d\n",sizeof(struct test));
  8. }
复制代码

打印出来应该是16字节,如果结构中没有“__attribute__((aligned(16))) ”
那么打印出来应该是默认的8字节---编译器默认由int型4(sizeof(int))字节对齐。


  1. struct test {
  2.         char a[1];
  3. };

  4. main()
  5. {
  6.         printf("sizeof(test):%d\n",sizeof(struct test));
  7. }
复制代码

结果为 1(sizeof(char))。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
23 [报告]
发表于 2004-10-22 16:27 |只看该作者

case的分段匹配(我找了很久了)

那这个东西的功能不是和#pragma pack()一样了吗?带着这样的疑问,我做了几个实验,结果很有趣。
我的机器是32位的,所以默认的是4字节对齐。
用#pragma pack()的时候,可以改成1字节对齐,2字节对齐,或者默认的4字节对齐。但是不能改成8、16、32字节对齐。
而用attribute这个确可以改成8、16、32、甚至64,但是就不能改成1、2对齐了。
真是奇怪。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
24 [报告]
发表于 2004-10-22 20:59 |只看该作者

case的分段匹配(我找了很久了)

attribute有n多的属性,man gcc里面有,以前读大学的时候还专门翻译了记载本本上,结果,毕业的时候全部换成路费了。^^

论坛徽章:
0
25 [报告]
发表于 2004-10-22 22:26 |只看该作者

case的分段匹配(我找了很久了)

VC不支持的,这个是GCC的扩展,
你可以在windows下面使用GCC来编译嘛,呵呵

论坛徽章:
0
26 [报告]
发表于 2004-10-23 10:56 |只看该作者

case的分段匹配(我找了很久了)

没办法,visual stuido下用的是if else搞的.

解决方案:
if()
else if()
else if()
else if()
else if()
else if()
else if()
else if()
else if()
else if()
else if()
else if()
else


累死我了,

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
27 [报告]
发表于 2004-10-23 12:52 |只看该作者

case的分段匹配(我找了很久了)

直接:
case 1: case 2: case 3: case 4:...
case 5: case 6: case 7: 嘛...这样不标准的东西没移植性的东西能偷懒的吗?

论坛徽章:
0
28 [报告]
发表于 2004-10-23 14:50 |只看该作者

case的分段匹配(我找了很久了)

原帖由 "woshi410" 发表:
没办法,visual stuido下用的是if else搞的.

解决方案:
if()
else if()
else if()
else if()
else if()
else if()
else if()
else if()
else if()
else if()
else if()
else if()
else


累死我了..........


恩,够辛苦!VC苦

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
29 [报告]
发表于 2004-10-23 18:06 |只看该作者

case的分段匹配(我找了很久了)

不可移植的扩展功能有何用?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP