2009-12-01 3 views
0

У меня есть следующий макрос, чтобы определить новую функцию после специальной схемы именования:Силовые пробелы в C Макро?

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

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

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

ответ

6

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

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

Но вы также должны смотреть на this linked SO answer, который имеет некоторые дополнительные подробности о поведении маркера оператора вставки:

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

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

+0

Thanks..dumb error :) – newgre

 Смежные вопросы

  • Нет связанных вопросов^_^