Chinaunix

标题: noreturn属性? [打印本页]

作者: Horizon2012    时间: 2011-09-17 10:22
标题: noreturn属性?

  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 属性到底咋用的?
作者: Horizon2012    时间: 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); 那样?
这是什么原因呢?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2