Преобразовать встроенную функцию в макрос

У меня 1 строка inline функция, которая является частью горячей точки в моем коде. Я хотел бы видеть, было ли бы изменение этого макроса полезным. При написании текста мне не приходилось беспокоиться о побочных эффектах. Но как мне написать макрос для этого без побочных эффектов?

#define FLAG1_BIT 4
struct node
{
    unsigned long key;
    struct node* child[K];      //format <address,flag1,flag2,flag3>
};

static inline bool isFlag1Set(struct node* p)
{
    return ((uintptr_t) p & FLAG1_BIT) != 0;
}

2 ответа

Решение

Во-первых, имейте в виду, я не вижу причин, почему компилятор не включил бы его, поэтому есть все шансы, что это упражнение ничего не даст вообще.

Первое правило, позволяющее избежать побочных эффектов, заключается в том, чтобы параметр появлялся в определении только один раз. Далее в определении оберните параметр и все определение в скобках:

#define isFlag1Set(p)   (((uintptr_t) (p) & FLAG1_BIT) != 0)

Пытаться:

#define IS_FLAG_1_SET(p)                \
{                                       \
     (((uintptr_t) p & FLAG1_BIT) != 0) \
}
Другие вопросы по тегам