Eu gostaria de ser capaz de fazer algo como
#print "C Preprocessor got here!"
para fins de depuração. Qual é a melhor / mais portátil maneira de fazer isso?
Eu gostaria de ser capaz de fazer algo como
#print "C Preprocessor got here!"
para fins de depuração. Qual é a melhor / mais portátil maneira de fazer isso?
Respostas:
A warning
diretiva é provavelmente o mais próximo que você chegará, mas não é totalmente independente da plataforma:
#warning "C Preprocessor got here!"
AFAIK funciona na maioria dos compiladores, exceto MSVC, no qual você terá que usar uma pragma
diretiva:
#pragma message ( "C Preprocessor got here!" )
#define WARNING(msg) _Pragma("message " #msg)
Os itens a seguir são compatíveis com MSVC e GCC .
#pragma message("stuff")
#pragma message "stuff"
O Clang começou a adicionar suporte recentemente, veja aqui para mais informações.
Outra solução é usar comentários mais um script de shell para processá-los. Isso requer alguma disciplina (ou um script de shell que detecta erros de digitação).
Por exemplo, adiciono comentários formatados //TODO
e, em seguida, um script de shell que coleta todos eles em um relatório.
Para casos de uso mais complexos, você pode tentar escrever seu próprio pré-processador simples. Por exemplo, você pode editar suas fontes como *.c2
arquivos. O pré-processador simples iria ler a fonte, procurar //TODO
e escrever printf("TODO ...")
no *.c
arquivo de saída .
Você não pode. Os pré-processadores são processados antes do código C. Não há diretivas de pré-processador para imprimir na tela, porque o código do pré-processador não é executado, ele é usado para gerar o código C que será compilado em código executável.
Qualquer coisa errada com:
#ifdef ...
printf("Hello");
#endif
Porque isso é tudo que você pode fazer no que diz respeito aos pré-processadores.
#ifdef _LINUX #define #preprocmsg "#warning" else #define #preprocmsg "#pragma message"
... Vou tentar fazer isso, mas o instinto me diz que a resposta é não.