簡體   English   中英

C中的圓括號和大括號代碼塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM