阅 读 文 章

gcc对C语言的扩展:局部标签声明(Locally Declared Labels)

[来源:网上转载 (http://www.chinaunix.net) | 作者:网友(不详) | 时间:2007-07-07 | 浏览:人次 ]

每个语句内嵌表达式都是一个可以声明局部跳转标签的域。一个局部标签只是一个标识符:你可以使用通常的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;                             \
})
论坛热门帖子: [lch203] 写得蛮好的linux学习笔记(10-21)
[黑马制造] 学习java的30个目标(10-19)
[笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19)
[udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18)
[沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18)
TAG标签: 声明 标签 语言 扩展 局部 一个 语句 申明 通常 表达式

最新评论 共有0位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表

网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.