gcc扩展2-局部标签locally declared labels的定义

定义:
_ _ label _ _ label1, label, /* … */;
说明:
局部标签只能定义在某个块作用域里面,须在块的最开始声明,在一般变量定义声明的前面。标签相当于跳转语句的参考地址。当宏里面有标签时,标签只能定义在局部块里面,不能定义在整个宏函数空间里面,因为当多次引用宏时,会发生重复定义。当然,这也可以用宏声明来代替。
例子:

// An highlighted block
#define SEARCH(value, array, target) \
		do {                         \
		__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[i][j] == SEARCH_target)\
				{ value = i; goto found;}
		    value)=-1;
		found: ;
		} while(0)

do {} while(0) 将标签放到局部块里,lable标签的生命周期在局部块里,多次引用该宏不会造成重复定义。
也可以用一个大的声明代替:

#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

声明的形式:
int x = ( { …; x })

你可能感兴趣的:(C)