Вопрос

У меня есть следующий макрос для определения новой функции в соответствии со специальной схемой именования:

#define CREATE_HOOK_STUB( func ) void ##func_STUB() { /* some code*/ }

Однако препроцессор всегда выполняет конкатенацию void и ##func_STUB но я, очевидно, хочу, чтобы он сохранил пробел в этой позиции.

Я знаю, что я мог бы просто добавить какую-нибудь строку к ##func_STUB, но это не то, чего я хочу.Как бы я решил это?

Это было полезно?

Решение

Я думаю, что то, чего вы действительно хотите, ближе к:

#define CREATE_HOOK_STUB( func ) void func##_STUB() { /* some code*/ }

Но вам также следует обратить внимание на это связано С ТАКИМ ответом который содержит некоторые дополнительные сведения о поведении оператора вставки токена:

Одна вещь, о которой следует помнить, когда вы используете операторы предварительной обработки token-paste ('##') или stringizing ('#'), заключается в том, что вам нужно использовать дополнительный уровень косвенности, чтобы они работали должным образом во всех случаях.

Если вы этого не сделаете и элементы, передаваемые оператору вставки токенов, сами по себе являются макросами, вы получите результаты, которые, вероятно, не то, что вы хотите...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top