Valery V. Vorotyntsev (vorotylo) wrote,
Valery V. Vorotyntsev
vorotylo

mag(cc)ic

Такой вот дивный макрос

/* 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.

Tags: c, code, gcc, tips
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 2 comments