博客统计信息

51cto博客之星
用户名:nathanxu
文章数:54
评论数:115
访问量:119381
无忧币:652
博客积分:2728
博客等级:6
注册日期:2006-09-28

我的技术圈(1)

更多>>
gcc对C语言的扩展:局部标签声明(Locally Declared Labels)
2006-10-10 14:16:48
每个语句内嵌表达式都是一个可以声明局部跳转标签的域。一个局部标签只是一个标识符:你可以使用通常的goto语句跳到它--但是只能在它所属的域内这么做。
一个局部标签的申明如下:
__label__ label;
或者:
__label__ label1, label2, ...;
局部标签的申明必须在语句内嵌表达式的开始出,紧跟({后面,在所有通常申明的左边。局部标签申明只是定义了标签的名字,但是并没有定义标签本身。 你必须用通常的标签使用方法来在语句内嵌表达式内部使用局部标签。

由于语句内嵌表达式经常用于宏,所以局部标签特性非常有用。如果在宏里包含了循环,一个goto能很有效的跳出循环。然而通常的标签的作用域式整个函数,如果宏在一个函数中被多次使用,标签就会在这个函数中被重复定义。而局部标签能避免这个问题。例如:


#define search(array, target)               \
({                                 \
__label__ found;                     \
typeof (target) _search_target = (target);     \
typeof (*(array)) *_search_array = (array);   \
int i, j;                           \
int value;                         \
for (i = 0; i < max; i++)               \
  for (j = 0; j < max; j++)               \
    if (_search_array[j] == _search_target) \
    { value = i; goto found; }           \
value = -1;                         \
found:                             \
value;                             \
})
分享至
更多
一键收藏,随时查看,分享好友!
0人
了这篇文章
类别:嵌入式开发技术圈()┆阅读()┆评论() ┆ 推送到技术圈返回首页

文章评论

 
 

发表评论            

【技术门诊】专家解析:软考重点难点及应试技巧
昵  称:
登录  快速注册
验证码:

请点击后输入验证码博客过2级,无需填写验证码

内  容: