免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3181 | 回复: 1
打印 上一主题 下一主题

noreturn属性? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-17 10:22 |只看该作者 |倒序浏览

  1. #include <stdio.h>

  2. int __attribute__((noreturn)) func (int i)
  3. {
  4.         if (i < 5) {
  5.                 printf ("%d\n", i);
  6.         }else{
  7.                 printf ("return");
  8. //              return 1;
  9.         }
  10. }


  11. int main (int argc, char** argv)
  12. {
  13. //      int ret;
  14.          func (1);
  15.         //printf("ret = %d\n", ret);
  16. //      ret = func (8);
  17. //      printf("ret = %d\n", ret);
  18.         return 0;
  19. }

复制代码
我声明了函数func为noreturn,为什么编译的时候会打印
test_3.c: In function 'func':
test_3.c:11: warning: 'noreturn' function does return

运行时候打印
1
Segmentation fault

即使我不注释掉func中的return 1 还是会这样的?
noreturn 属性到底咋用的?

论坛徽章:
0
2 [报告]
发表于 2011-09-17 11:05 |只看该作者
我参看了网上的一些资料,改写成这样

  1. #include <stdio.h>

  2. void __attribute__((noreturn)) func (int i)
  3. {
  4.         printf("%d\n",i);
  5. }

  6. int print (int i)
  7. {
  8.         if (i > 4){
  9.                 return 1;
  10.         }else{
  11.                 func(2);
  12.         }
  13. }

  14. int main (int argc, char** argv)
  15. {
  16.         print (3);
  17. }

复制代码
编译打印
test_3.c: In function 'func':
test_3.c:7: warning: 'noreturn' function does return

运行的时候一直打印:
2                           
2                           
2                                                
2                           
2



2
2
2
Segmentation fault

感觉好像反复调用func(2); 那样?
这是什么原因呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP