Добавьте суффикс к enum во время выполнения - PullRequest
1 голос
/ 09 января 2020

Я хочу, чтобы функция принимала строку перечисления и добавляла к этой строке суффикс, по сути, преобразовывая его в определяющую строку.

ACTION_PERMIT ---> ACTION_PERMIT_F

Есть ли способ сделать это? Или есть лучший способ выполнить это отображение?

typedef enum {
    ACTION_PERMIT,    
    ACTION_DENY,      
    ACTION_COUNT,     
    ACTION_TC,        
    ACTION_REDIRECT  
}action_e;

#define    ACTION_PERMIT_F        1 << 0     
#define    ACTION_DENY_F          1 << 1     
#define    ACTION_COUNT_F         1 << 2     
#define    ACTION_TC_F            1 << 3     
#define    ACTION_REDIRECT_F      1 << 4  


void rule_action_add(rule *rule, action_e action_type, uint32 value)
{
    assert(rule != NULL);
    action_t *action = &rule->action;

    action->exist_map |= action_type;   // <--- Use enum string and add "_F" suffix   
}

1 Ответ

2 голосов
/ 09 января 2020

Есть ли способ сделать это?

Не так. Значение переменной action_type существует во время выполнения, и к этому моменту препроцессор уже запущен.

Или есть ли лучший способ выполнить это отображение?

Для сдвига битов можно использовать значение цифры c константы перечисления.

action->exist_map |= (1u << action_type);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...