Pergunta

Para aprender e demonstrar, preciso de uma macro que imprime seu parâmetro e avalia isso. Suspeito que seja um caso muito comum, pode ser até uma FAQ, mas não consigo encontrar referências reais.

Meu código atual é:

#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", __STRING(expr), (expr)))

e depois:

PRINT(x & 0x01);

Funciona bem, mas não tenho certeza do status legal da macro __String, especialmente porque está no espaço de nome __ privado.

Então, minhas perguntas:

  1. Existe uma maneira melhor de escrever esta macro?
  2. __String Standard/Great/Mal?
  3. Como usar as ferramentas de pesquisa existentes para encontrar sobre __String? O mecanismo de pesquisa de So só procura qualquer coisa que contenha string :-(
Foi útil?

Solução

Você pode usar o token de pré -processador # que converte seu argumento RHS em uma string literal:

#include <stdlib.h>
#include <stdio.h>

#define STR(x) #x
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", STR(expr), (expr)))

int main(void)
{
    int x = 7;

    PRINT(x & 0x01);

    return EXIT_SUCCESS;
}

2) Definitivamente não é padrão, e é a primeira vez que me deparo com isso; Não é de surpreender, pois parece não fazer muito mais do que a macro str () acima, à primeira vista.

3) Google parece funcionar bem.

Outras dicas

Algo como

#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", #expr, (expr)))

é provavelmente o que você quer. # é o operador de stringification.

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