Força espaço em branco C Macro?
-
11-09-2019 - |
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?
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 ...