Imprimir mensagem no terminal no tempo de compilação [RESOLVIDO]

1. Imprimir mensagem no terminal no tempo de compilação [RESOLVIDO]

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 24/02/2015 - 17:25h

Então, como imprimo uma mensagem no tempo de compilação? Queria que alguém me dissesse como faço isso no gcc/g++. Se me lembro bem, tinha como imprimir mensagem de erro com alguma diretiva do preprocessador e interromper a compilação mas acontece que nunca usei de verdade e nem lembro como que se usa ou de algum exemplo. Eu quero apenas imprimir a mensagem mas deixando a compilação seguir. Se alguém souber, pode, por favor, dar essa refrescada na minha cuca rsrsrs





  


2. MELHOR RESPOSTA

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 25/02/2015 - 07:47h

Bom dia.

A diretiva #error faz isso.


int main()
{
#error "nao vou compilar"
printf ("hellow world\n");
return 0;
}


Edit: Simplesmente colocar a #error no meio do programa não faz muito sentido, já que o pré-processador roda antes de qualquer análise de código. Então, combinar a error com condicionais do pré (if, ifdef ifndef, etc) faz mais sentido.

Edit2: Também tem a #warning (que vai gerar.... uma warning. Aí é com você usar Werror) - mas ainda assim acho que o uso sem condicionais não faz muito sentido. A não ser um lembrete para melhorar o código, ou algo similar ("lembrar de escrever rotina de checagem de errors aqui", ou algo do tipo).


int main()
{
#warning "vou compilar, mas vou gerar uma warning"
printf ("hellow world\n");
return 0;
}


Espero ter ajudo,
Enzo Ferber

3. Re: Imprimir mensagem no terminal no tempo de compilação [RESOLVIDO]

Ton Melo
IZhaq_melo

(usa FreeBSD)

Enviado em 24/02/2015 - 17:41h

Sam L. escreveu:

Então, como imprimo uma mensagem no tempo de compilação? Queria que alguém me dissesse como faço isso no gcc/g++. Se me lembro bem, tinha como imprimir mensagem de erro com alguma diretiva do preprocessador e interromper a compilação mas acontece que nunca usei de verdade e nem lembro como que se usa ou de algum exemplo. Eu quero apenas imprimir a mensagem mas deixando a compilação seguir. Se alguém souber, pode, por favor, dar essa refrescada na minha cuca rsrsrs




faça a a compilação e de verfoma que tenha "verbose" e use o comando 'tee' e mande para um arquivo;

tente tb somente a saida por arquivo:

fonte:
http://stackoverflow.com/questions/2297536/how-do-i-capture-all-of-my-compilers-output-to-a-file



4. Re: Imprimir mensagem no terminal no tempo de compilação [RESOLVIDO]

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 25/02/2015 - 09:01h

Sam L. escreveu:

Então Enzo, pelo visto não faz sentido mesmo o que eu quero, não convencionalmente rsrsrsrs.
Vou usar o #warning apenas como uma gambiarra, das mais feias mas funciona.
Obrigado pessoal.


@Sam L.,

Se importa em compartilhar o que e como está fazendo?
É sempre bom ver novas idéias e implementações, e como disse, não consigo imaginar muitas formas de usar #error e/ou #warning fora o que disse.

Enzo Ferber
[]'s


5. Re: Imprimir mensagem no terminal no tempo de compilação [RESOLVIDO]

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 25/02/2015 - 17:08h

Sam L. escreveu:

É que tenho uma função com 5 código diferentes. Como não é possível eu usar os 5 ao mesmo tempo, fica difícil criar uma solução. Então, divido os 5 códigos com macros, tipo, USE_CODIGO4, daí quando eu quero usar um dos códigos eu apenas passo a definição do código para o compilador. Mas você pergunta por que não criar uma função para cada código? É muito simples, a função sem os 5 códigos, tem 400 linhas e manter 5 funções de cada código seria um desastre e haveria grande risco de fu?er com tudo.
Por isso, queria apenas imprimir algumas informações sobre o código mas só em tempo de compilação, pois em execução ficaria muitas informações no terminal e é importante que eu economize espaço na saída porque este programa gerará saídas para outros programas, e poderia dificultar minha vida ao fazer o parsing das informações.




Entendi.

Quanto à saídas para parsing, você pode utilizar 'stderr' para imprimir o que você quiser, e na hora de rodar o programa você utiliza o redirecionamento do shell. Isso evitaria as diretivas do pré. Não sei se isso ajudaria, já que parece que você usa defines para alternar entre códigos e pode-se alterar defines pela linha de comando de GCC...


...
fprintf(stderr, "minha mensagem");
...

$ ./meu_prog 2>/dev/null
$


Isso vai suprimir toda e qualquer mensagem que você imprimir na stderr.


Enzo Ferber
[]'s




6. Re: Imprimir mensagem no terminal no tempo de compilação [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 26/02/2015 - 09:07h

Sam L. escreveu:

É que tenho uma função com 5 código diferentes. Como não é possível eu usar os 5 ao mesmo tempo, fica difícil criar uma solução. Então, divido os 5 códigos com macros, tipo, USE_CODIGO4, daí quando eu quero usar um dos códigos eu apenas passo a definição do código para o compilador. Mas você pergunta por que não criar uma função para cada código? É muito simples, a função sem os 5 códigos, tem 400 linhas e manter 5 funções de cada código seria um desastre e haveria grande risco de fu?er com tudo.
Por isso, queria apenas imprimir algumas informações sobre o código mas só em tempo de compilação, pois em execução ficaria muitas informações no terminal e é importante que eu economize espaço na saída porque este programa gerará saídas para outros programas, e poderia dificultar minha vida ao fazer o parsing das informações.


Não vi seu código, mas acho que fazer cinco funções diferentes deve dar menos trabalho do que manter 5×400=2000 linhas dentro de uma função só. E você poderia usar um ponteiro para função, o que lhe permitiria escolher a função desejada em tempo de execução, sem necessidade de recompilar o programa ou ter programas distintos. Poderia até compilar as cinco funções em bibliotecas dinâmicas diferentes, e carregar (com dlopen()), apenas a função escolhida para a memória na hora da execução.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts