[英]Round and curly bracket block of code in C
誰能解釋這個宏的計算結果:
#define memcpy(dest,src,n) ({ \
void * _res = dest; \
__asm__ ("cld;rep;movsb" \
::"D" ((long)(_res)),"S" ((long)(src)),"c" ((long) (n)) \
:"di","si","cx"); \
_res; \
})
這取自 Linux kernel 的第一個版本,但我想知道被這個({ })
包圍的代碼塊代表什么以及它會在哪里使用?
括號中的復合語句是 GCC 擴展,稱為語句表達式。 它允許您在需要表達式的地方包含聲明、for 循環等。 復合語句中的最后一件事應該是一個表達式,后跟一個分號,作為整個構造的值。
clang 編譯器也支持它們。
它們主要是為了方便,無需編寫大量只使用一次的小函數,但也可用於防止在一個術語出現多次時出現宏問題; 例如:
#define maxint(a,b) \
({int _a = (a), _b = (b); _a > _b ? _a : _b; })
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.