Заставить пробел в C Макро? - PullRequest
0 голосов
/ 01 декабря 2009

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

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

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

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

1 Ответ

6 голосов
/ 01 декабря 2009

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

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

Но вы также должны взглянуть на этот связанный ответ SO , в котором есть некоторые дополнительные сведения о поведении оператора вставки токена:

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

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

...