Pergunta

Eu tenho o seguinte macro para definir uma nova função a seguir um esquema de nomenclatura especial:

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

No entanto, o pré-processador sempre concatena void e ##func_STUB mas eu, obviamente, quer para preservar o espaço em branco nessa posição.

Eu sei que eu poderia apenas preceder alguma corda para ##func_STUB, mas isso não é o que eu quero. Como eu poderia resolver isso?

Foi útil?

Solução

Eu acho que você realmente quer é mais perto de:

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

Mas você deve olhar também para esta ligada SO responder que tem alguns detalhes adicionais sobre o comportamento do operador colando token:

Uma coisa a estar ciente de quando você está usando o token-colar ( '##') ou stringizing ( '#') pré-processamento de operadores é que você tem que usar um nível extra de engano para que eles funcionem corretamente no todos os casos.

Se você não fizer isso e os itens passados ??para o operador token-colar são eles próprios macros, você poderá obter resultados que provavelmente não são o que você quer ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top