Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33239
  • 博文数量: 15
  • 博客积分: 351
  • 博客等级: 一等列兵
  • 技术积分: 105
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-22 12:34
文章分类

全部博文(15)

文章存档

2011年(15)

我的朋友

分类: C/C++

2011-01-28 21:37:07

  1. 标签(label)引用 : 

  2. 片段1 :

  3.   1 #include <stdio.h>
  4.   2
  5.   3
  6.   4 int main( int argc , char **argv )
  7.   5 {
  8.   6
  9.   7
  10.   8 if(1){
  11.   9 printf("point A\n" );
  12.  10 goto error;
  13.  11 }
  14.  12
  15.  13 if(1){
  16.  14 printf("point B\n");
  17.  15 }
  18.  16
  19.  17 error :
  20.  18
  21.  19 printf("point C\n");
  22.  20
  23.  21
  24.  22 return 0;
  25.  23 }
  1.     xuk@localhost:~/svn/goodbyeworld/binary-hacks/22/lable$ gcc main.c
  2.     xuk@localhost:~/svn/goodbyeworld/binary-hacks/22/lable$./a.out
     
  1.     point A
  2.     point C
  片段 2 :
 
  1. 1 #include <stdio.h>
  2.   2
  3.   3 int main( int argc , char **argv )
  4.   4 {
  5.   5 void *lable;
  6.   6 lable = &&error;
  7.   7
  8.   8 if(1){
  9.   9 printf("point A\n" );
  10.  10 goto *lable;
  11.  11 }
  12.  12
  13.  13 if(1){
  14.  14 printf("point B\n");
  15.  15 }
  16.  16
  17.  17 error :
  18.  18 printf("point C\n");
  19.  19
  20.  20 return 0;
  21.  21 }
06:10:41-xuk@localhost:~/svn/goodbyeworld/binary-hacks/22/lable$gcc main.c
06:10:42-xuk@localhost:~/svn/goodbyeworld/binary-hacks/22/lable$./a.out
point A
point C

片段 3 :
  1. #include <stdio.h>
  2.   2
  3.   3 int main( int argc , char **argv )
  4.   4 {
  5.   5 static int labels[] = { &&label0 - &&label0 , &&label1 - &&label0 , &&label2 -&&label0 };
  6.   6 int i = 0;
  7.   7
  8.   8 goto *(&&label0 + labels[i]);
  9.   9
  10.  10 label0 :
  11.  11 printf("point A\n" );
  12.  12 label1 :
  13.  13 printf("point B\n" );
  14.  14 label2 :
  15.  15 printf("point C\n" );
  16.  16
  17.  17 return 0;
  18.  18 }
根据 i 的取值不同 , 会跳到不同的label$
阅读(424) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:#23 . 在gcc中使用内联汇编 (inline assembler)

给主人留下些什么吧!~~

xukeys2011-01-28 22:31:49

这节说的是 gcc 对c的扩展 , 包括 内置函数( built-in ) , 属性 (attribut ) 和 标签 (label )

更多的gcc C扩展参考 :
[1]. http://hellogcc.blogbus.com/logs/67258946.html
[2]. http://gcc.gnu.org/onlinedocs/gcc-4.5.2/gcc/C-Extensions.html#C-Extensions