局部標籤(gcc對c的擴展)

局部標籤定義
一個局部標籤的申明如下:

  __label__ label;

或者:

__label__ label1, label2, ...;

使用局部標籤
每個語句內嵌表達式都是一個可以聲明局部跳轉標籤的域。一個局部標籤只是一個標識符:你可以使用通常的goto語句跳到它--但是只能在它所屬的域內這麼做。
局部標籤的申明必須在語句內嵌表達式的開始出,緊跟({後面,在所有通常申明的左邊。局部標籤申明只是定義了標籤的名字,但是並沒有定義標籤本身。 你必須用通常的標籤使用方法來在語句內嵌表達式內部使用局部標籤。

由於語句內嵌表達式經常用於宏,所以局部標籤特性非常有用。如果在宏裏包含了循環,一個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;
})

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章