Такой вот дивный макрос
/* Allocate memory for type and fill it with zero-valued bytes */
#define new_zeroed(type) ({ \
type *__x = malloc(sizeof(type)); \
memset(__x, 0, sizeof(type)); \
__x; })
заменяет собой специализированные функции вида
static inline struct Foo *
new_zeroed_Foo(void)
{
struct Foo *new = malloc(sizeof(struct Foo));
memset(new, 0, sizeof(*new));
return new;
}
Как этот синтаксис работает - понятия не имею. (Просветите дурака?)
Идею списал отсюда:
http://lxr.linux.no/#linux+v2.6.33/tools/perf/util/include/linux/kernel.h#L26
* * *
Update: Ага. По
официальной версии оно зовётся compound statement. А `gcc -pedantic' ругается на него, называя braced-group. Что ж, будем знать...
Вот ещё на stackoverflow
интересное пишут про ISO C equivalent.