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内核的第一个版本,但我想知道这个({ })包围的代码块代表什么,它会用在哪里?

括号中的复合语句是 GCC 扩展,称为语句表达式。它允许您在需要表达式的地方包含声明、for 循环等。复合语句中的最后一件事应该是一个表达式,后跟一个分号,作为整个结构的值。

clang 编译器也支持它们。

它们主要只是为了方便,无需编写大量仅使用一次的小函数,但也用于防止术语出现多次时出现宏问题;例如:

#define maxint(a,b) \
       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })