GCC e suas opções

GCC e suas opções

por Caio Cezar Zapater de Souza -
Número de respostas: 3
Professor estava verificando o man do gcc e descobri que existe uma opção -x que especifica qual o linguagem de programação que ele irá compilar (c c++ c-header c
++-header ....) caso esta opção não seja passada o compilador irá a extensão do arquivo, se for .c usar linguagem c se for .cc usará c++, e assim por diante.
Acho interessante colocar esta opção nos opções de compilação do gcc, pois alguns alguns problemas podem ser "mascarados".

Por exemplo:

Em c++ a declaração

void funcao(int a)
{
... ...
for(int i=0;i<a;i++)
{
... ...
}
... ...
}

é correta, já em c não, é necessário declarar o variável fora do for:

void funcao(int a)
{
int i;
... ...
for(i=0;i<a;i++)
{
... ...
}
... ...

}

Ele ainda da um warning se a variável é criada no meio da função restringindo sua visualização apenas para o que esta abaixo da sua declaração.

Além disso estava tendo problemas em compilar com o gcc, dava o seguinte erro:

/tmp/ccIU0iqs.o: (.eh_frame+0x11) : undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

Este erro é devido ao gcc querer usar bibliotecas c++ na compilação mas não conseguir, dai só conseguia compilar o programa com o g++. Procurei na internet e lendo o man do gcc encontrei vários warning que são exclusivos do c++ e com a opção -Wall ele as habilita dando warning e error que em c não existem, já com a opção -x c estes warning não aparecem facilitam assim nossa vida.

Como sugestão acho que deveríamos usar para compilar nossos programas a seguinte linha de comando:

gcc -Wall -pedantic -O2 -ansi -x c -o executavel meuprograma.c


Caio Cezar.



Em resposta à Caio Cezar Zapater de Souza

Re: GCC e suas opções

por Carlos Hitoshi Morimoto -
No caso de declarações em qualquer lugar, como no C++, acredito que a versão C99 já permita isso, enquanto a versão C90 não. Eu sei que o gcc já oferece muitas coisas do C99, mas como tem vários compiladores que não, a gente costuma ensinar C90. O C99 deixou o C mais parecido com C++.

Com relação a opção -x, se eu entendi, se você usar a extensão .c não tem problema (certo?), pois ele vai usar o compilador C.
Que extensão você está usando?

finalmente, com relação ao erro, que versão de gcc você está usando (use o gcc -version)? se for a 3.x ou anterior, pode ser esse o problema. O gcc está na versão 4. alguma coisa.
[]s
ht

Em resposta à Carlos Hitoshi Morimoto

Re: GCC e suas opções

por Caio Cezar Zapater de Souza -
realmente o C99 já permite isso mas mesmo assim ele da o warning

warning: ISO C90 forbids mixed declarations and code.


Isso mesmo, se o arquivo tiver a extensão .c não dá erro mas acho que isso pode causar problemas, pois não sei se isso vale para as versões do gcc e para usuários windows se utilizar .txt no nome do arquivo pode dar erro, mas foi só uma sugestão.

e versão da gcc é

gcc (GCC) 4.1.2 20070502 (Red Hat 4.1.2-12)

Mas esse erro só da se vc usar o gcc para compilar programas c++, por exemplo se vc usar uma extensão .123 ele pode querer compilar o programa em c++ ai da esse erro.
Em resposta à Caio Cezar Zapater de Souza

Re: GCC e suas opções

por Carlos Hitoshi Morimoto -
Obrigado.
puxa, em mac110/115, vocês podiam entregar um programa C sem a extensão .c? Nesse curso eu vou descontar ponto de quem não fizer isso, devido a inconsistência/estilo/etc.
Resumindo um programa C precisa ter extensão ".c". Se ele tiver uma outra extensão, e o nosso monitor não conseguir compilar... bem os critérios já foram anunciados (isso vale para programas .exe, escritos em outra linguagem, etc).
[]s
ht