Как мне создать макрос C , чтобы получить целочисленное значение строки? Конкретный вариант использования следует из вопроса здесь . Я хочу изменить код следующим образом:
enum insn {
sysenter = (uint64_t)'r' << 56 | (uint64_t)'e' << 48 |
(uint64_t)'t' << 40 | (uint64_t)'n' << 32 |
(uint64_t)'e' << 24 | (uint64_t)'s' << 16 |
(uint64_t)'y' << 8 | (uint64_t)'s',
mov = (uint64_t)'v' << 16 | (uint64_t)'o' << 8 |
(uint64_t)'m'
};
На это:
enum insn {
sysenter = INSN_TO_ENUM("sysenter"),
mov = INSN_TO_ENUM("mov")
};
Где INSN_TO_ENUM
заменяется на тот же код. Производительность будет такой же, но удобочитаемость значительно повысится.
Я подозреваю, что в такой форме это может быть невозможно из-за неспособности препроцессора C обрабатывать строки, поэтому это также будет нежелательным, но приемлемым решением (макрос с переменным аргументом):
enum insn {
sysenter = INSN_TO_ENUM('s','y','s','e','n','t','e','r'),
mov = INSN_TO_ENUM('m','o','v')
};