[FUG-BR] RES: C/C++

Nilton Jose Rizzo rizzo em i805.com.br
Sábado Fevereiro 24 17:56:56 BRT 2007


On Sat, 24 Feb 2007 08:40:25 -0300, Anderson P. Matos - LINHARES ON LINE wrote
> Paulo, a função main nem sempre deve retorna um valor, somente se 
> você quiser, quando a função começa com void, significa que não 
> retorna valor nenhum, e ainda você falou que a função main DEVE 
> retornar um valor inteiro, isso também esta errado, a função pode 
> retornar um char, float, double, usigned float...e mais um monte...


   Essa exigencia é da linguagem c++ faça esse exemplo e veja 
   que o erro persiste


#include <stdio.h>

void main (void);

void main (void)
{
   printf ("teste");
}


>g++ -o teste teste.cpp
teste.cpp: In function `int main(...)':
teste.cpp:8: declaration of C function `int main(...)' conflicts with
teste.cpp:4: previous declaration `void main()' here


> 
> Att.
> 
> Anderson P. Matos              
> Analista de Suporte
> Linhares Serviços On-Line
> Tel: (27) 2103-8100
> E-mail: suporte at linharesonline.com.br
> ---------------------------------------------------------
> Tel.: (27) 2103-8105                 
> Cel: (27) 9936-4186
> E-mail: anderson at linharesonline.com.br  
> Messenger: modelobesta at hotmail.com
> Skype: andersonpmatos
> 
> -----Mensagem original-----
> De: freebsd-bounces at fug.com.br [mailto:freebsd-bounces at fug.com.br] Em
> nome de Paulo Pires
> Enviada em: sexta-feira, 23 de fevereiro de 2007 08:00
> Para: Lista Brasileira de Discussão sobre FreeBSD (FUG-BR)
> Assunto: Re: [FUG-BR] C/C++
> 
> On 2/21/07, Rodrigo Ferreira <rsferreira at vipway.com.br> wrote:
> > Bom dia lista, venho tentando a algum tempo compilar/rodar arquivos .c
> e
> > .cpp, porem não obtive sucesso, antes de migrar para o FreeBSD eu
> > utilizava o turbo c++ no win, e agora no Free estou tentando usar o
> > gcc/g++, só que no programa mais simples que estou tentando fazer
> > aparece erro.
> >
> > Programa teste:
> >
> > #include "/usr/include/stdio.h"
> > #include "/usr/include/conio.h"
> >
> > void main (void)
> > {
> > puts ("Alo Mundo");
> > getch();
> > }
> >
> > dai quando eu dou g++ teste.cpp, aparece esses erros:
> > teste.cpp:2:32: /usr/include/conio.h: No such file or directory
> > teste.cpp:5: error: `main' must return `int'
> > teste.cpp: In function `int main(...)':
> > teste.cpp:7: error: `getch' undeclared (first use this function)
> > teste.cpp:7: error: (Each undeclared identifier is reported only once
> > for each function it appears in.)
> 
> Um dos erros que eu ia apontar já foi apontado pelo compilador C++ 
> (em C não seria indicado como erro): a função main() deve retornar 
> um valor inteiro (int), de modo que tem que ser declarada como "int 
> main()" ou "int main(int argc, char **argv)" (ou ainda "int main(int 
> argc, char *argv[])").  A isso está ligado ou outro erro no seu 
> programa, mas que não está indicado acima: para sair da função que 
> retorna int, você tem obrigatoriamente que ter um comando "return 
> valor;", onde "valor" é uma expressão com valor inteiro (geralmente -
> - especialmente no UNIX -- main() retorna 0 quando é bem sucedido),
>  ou uma chamada "exit(valor);", onde "valor" também é inteiro.
> 
> Quando você está incluindo arquivos de cabeçalho da biblioteca 
> padrão, a convenção é usar '#include <cabeçalho.h>', ao invés de '#include
> "cabeçalho.h"'.  Esta última forma, usando aspas, é usada para
> arquivos de cabeçalho criados pelo próprio programador, para
> distingüi-los dos cabeçalhos padronizados.  Também não é usual 
> colocar o caminho completo dos arquivos, especialmente quando se 
> está usando cabeçalhos da biblioteca padrão (com <>, e não com aspas,
>  pois o compilador sabe como encontrá-los).

Só um parentses nesse bapo, se me permite PAPiris...
o include com <> significa que o compilador irar procurar pelo arquivo
nos PATH padrão de pesquisa (INCLUDE) e com "" só irá pesquisar no 
diretório atual

por exemplo:

#include <stdio.h>

ele irá procurar em /usr/include e /usr/X11R6/include.  Essa procura
é feita adicionando o PATH ao nome do arquivo e o compilador tenta abri-lo
caso vc precise de arquivos system net ou outro qualquer
deve ser feito da forma:

#include <sys/time.h>

caso voce queira incluir ou modificar a pesquisa olhe as opções -I (include)
e -L (lib) do gcc
e veja também sobre variáveis de ambiente (INCLUDE/LIB/CC e outras)


> 
> Como outros já disseram, conio.h não é um cabeçalho padrão e a função
> getch(), que seria declarada nesse cabeçalho específico dos
> compiladores da Borland, também não é comumente aceita no UNIX (pelo
> menos não com o mesmo sentido que teria no compilador da Borland).
> Principalmente enquanto você está aprendendo, procure aprender a
> linguagem padrão, ao invés de uma implementação específica.
> 
> Outra coisa: seu arquivo indica programa em C++, mas o código que 
> você escreveu é C.  Não que esteja estritamente errado, mas a minha 
> recomendação pessoal é que se você vai usar apenas C em um módulo de 
> programa, use o compilador C (costuma ser mais rápido) e coloque nos 
> arquivos a extensão ".c", ao invés de ".cpp" ou ".cc".  Ou, então, 
> aprenda logo C++ através de exemplos usando recursos próprios do C++,
>  se quiser usar os recursos que essa linguagem oferece antes de 
> ficar "viciado" em C puro e simples.
> 
> -- 
> Um abraço.
>         Paulo A. P. Pires
> 
> ... Qui habet aurem audiat quid Spiritus dicat ecclesiis.
> -------------------------
> Histórico: http://www.fug.com.br/historico/html/freebsd/
> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
> 
> -------------------------
> Histórico: http://www.fug.com.br/historico/html/freebsd/
> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


-- 
Nilton José Rizzo 
805 Informatica 
Disseminado tecnologias 
021 2413 9786



Mais detalhes sobre a lista de discussão freebsd