[FUG-BR] C/C++
Paulo Pires
pappires em gmail.com
Sexta Fevereiro 23 07:59:52 BRT 2007
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).
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.
Mais detalhes sobre a lista de discussão freebsd