日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gcc对C语言的扩展:局部标签声明(Locally Declared Labels) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
每個語句內嵌表達式都是一個可以聲明局部跳轉標簽的域。一個局部標簽只是一個標識符:你可以使用通常的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; ? ? ? ? ? ? ? ? ? ? ? ? ? ? \
})

轉載于:https://blog.51cto.com/nathanxu/6030

總結

以上是生活随笔為你收集整理的gcc对C语言的扩展:局部标签声明(Locally Declared Labels)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。