[FUG-BR] C/C++ - Desenvolvimento no FreeBSD
O meu email é baseado em opiniões pessoais. Qual ferramenta ou biblioteca utilizar pode ser algo muito pessoal. Você domina o gcc? Autoconf, automake e libtool? Seria bom também controle de versão (subversion, de preferência) para você já ir se acostumando com técnicas/ferramentas usadas em projetos de software livre. *Ferramentas*: Se o projeto que você quiser desenvolver for grande, eu sugiro uma IDE para automatizar o desenvolvimento: Anjuta (a versão 2.x estável está quase desenvolvida, eu acho. Essa nova versão vai ser excepcional.), Eclipse ou NetBeans. As duas últimas desenvolvidas em JAVA; portanto, você vai precisar de uma máquina melhor devido a lentidão inerente a JAVA (Eu muito gosto da linguagem JAVA, da API e tal; mas, para mim, é uma lentidão [na inicialização] inquestionável). Caso contrário, utilize o emacs mesmo como ferramenta no modo texto. *Sobre "as funções que o sistema disponbiliza"*: O que exatamente você pretende aprender/fazer no sistema? Na maioria das vezes você vai utilizar: - bibliotecas externas ao SO, geralmente portáveis - bibliotecas relacionadas a C e/ou C++ - bibliotecas relacionadas ao POSIX Nada verdadeiramente específico do FreeBSD. É justamente essa a causa da portabilidade entre os unix(s): devido a padronização das linguagens C/C++ e do padrão POSIX. Você deveria procurar ler é sobre o padrão POSIX, então. Eu recomendo esses livros que abordam algumas coisas do POSIX: * Practical Unix programming : a guide to concurrency, communication, and multithreading <-- Esse livro é bem antigo, mas tem muitas explicações boas nele. Você poderia pular algumas partes que ele foge do POSIX atual e ler as outras partes normalmente. Robbins, Kay A * POSIX Programmer's Guide Writing Portable UNIX Programs with the POSIX.1 Standard Donald A. Lewine Data General Corporation É bom ter a própria especificação do POSIX para consulta. O padrão atual tem quase 4000 páginas hehehe. Tente procurar uma versão completa na rede P2P. Se não encontrar, me diga. Eu consegui essa versão completa gratuitamente de uma pessoa do OpenGroup que gentilmente me adicionou como colaborador do padrão só para eu ter acesso à versão completa. Eu gostei da atitude desse cara que coordena uma lista de discussão do posix dentro do OpenGroup. até, gethostbyname Henrique Berenguel escreveu: > Sim ,gostaria de trabalhar com desenvolvimento em C ou C++ no Free, C e C++ > eu conheço bem, porem, o ambiente de desenvolvimento do Free, ferramentas, > as funções que o sistema disponibiliza, isso eu não conheço muito bem, nesse > sentido que gostaria de livros que me ajudem... > > obrigado > - Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
Re: [FUG-BR] C/C++
On 2/21/07, Rodrigo Ferreira <[EMAIL PROTECTED]> 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 ', 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. - Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
Re: [FUG-BR] C/C++
gethostbyname wrote: > Bom, o compilador não vai encontrar o conio.h de maneira alguma mesmo > porque esse arquivo de cabeçalho é de uma biblioteca específica do Windows. > Eu não conheço bem as funções declaradas em conio.h, mas creio que elas > devam ser bastante obsoletas. Portanto, procure algo melhor. > > Sugestões: > > * Tente estudar C++ ou JAVA invés de C. > * Não estude através de qualquer livro que utilize bibliotecas > específicas do Win, quanto mais bibliotecas obsoletas. Nunca perca tempo > com Herbert Schmit (eu acho que é assim que se escreve). Você tem que > ter acesso a alguma biblioteca pública também, mas se não tiver: > www.ebooksportal.org e tem muitos livros bons em inglês na rede do emule > também. > * Não desista do gcc/g++ e do ambiente Linux/FreeBSD. Programar no > Windows é muito muito mais difícil na minha opinião. O compilador da MS > é um lixo (embora tenha melhorado muito no VS 2005) e conseguir > informações em certas áreas é bem mais complicado. Quando você quiser > alguma informação sobre uma função no FreeBSD, comece pelo arquivo de > inclusão. Bem mais prático, não? > * Você não necessitará de uma IDE no FreeBSD já que você pode utilizar o > vi ou emacs, mas se necessitar: Anjuta ou NetBeans (com). > > -- > Veja o comentário no arquivo conio.h do Visual Studio 2005: > > *Purpose: > * This include file contains the function declarations for > * the MS C V2.03 compatible console I/O routines. > -- > Se você não quiser escutar a minha sugestão n° 1, tudo bem: > Troque a linha 1 por #include > Delete a linha 2 e a linha 7 > Se você estiver utilizando alguma IDE, invés de getch() tente pausar o > programa através de um debugger. > > 1#include "/usr/include/stdio.h" > 2#include "/usr/include/conio.h" > 3 > 4void main (void) > 5{ > 6puts ("Alo Mundo"); > 7getch(); > 8} > > > -- > > gethostbyname > > > > Rodrigo Ferreira escreveu: > >> 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.) >> >> >> eu sei que 1 erro é que ele não esta encontrando o conio.h, mais eu não >> consegui localizar ele. >> >> Alguem poderia me dar um help para tentar compilar isso? >> >> Grato >> - >> 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 > > > Po pessoal, valeu, consegui compilar com a ajuda de voces. Era esse empurrãozinho que tava faltando pra mim, grato. - Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
Re: [FUG-BR] C/C++
On Wed, 21 Feb 2007 10:46:18 + Rodrigo Ferreira <[EMAIL PROTECTED]> wrote: > eu sei que 1 erro é que ele não esta encontrando o conio.h, mais eu não > consegui localizar ele. > > Alguem poderia me dar um help para tentar compilar isso? conio.h significa "Console I/O", e acho que só os compiladores da Borland oferecem isso. Não tem pra UNIX (que eu saiba), embora seja só uma questão de fazer. O mais apropriado é tu identificar o que tu realmente usa na conio.h e ver se encontra similares na stdio.h, stdlib.h e unistd.h. Se não encontrar, pode ser que seja algo muito "MS-DOS". Como sugestão, dê uma olhada na biblioteca ncurses (google ncurses), que provavelmente terá todas as funcionalidades que tu busca de console, além de ser altamente portável. A parte mais difícil, de longe, será aceitar a transição abrupta de telas DOS para terminais TTY UNIX (não "pode" mais escrever diretamente na memória de vídeo). :) Últimas dicas: em UNIX, getch() existe como getc(), na stdio.h. Os includes em geral tu não fará com o caminho absoluto, apenas "#include ", pois tu não tem certeza de como o usuário instalou o compilador dele (ie, os arquivos .h podem estar em /usr/local/gcc-4.1.1/include ou algum outro diretório que ele tenha inventado). Caso o compilador não encontre os arquivos, tu inclui diretórios de busca com "-I/usr/local/gcc-4.1.1 -I.", por exemplo. gcc(1) tem mais detalhes. Função main() em UNIX precisa retornar int. Isso é convenção. Teu programa ficaria assim: #include int main() { puts("Alo Mundo"); /* getc() requer um FILE* como parâmetro, stdin é a entrada padrão */ getc(stdin); /* programas UNIX costumam retornar 0 em caso de sucesso, e outro valor qualquer para indicar que houve erro -- a critério do programador */ return 0; } -- Ricardo Nabinger Sanchez <[EMAIL PROTECTED],wait4.org}> Powered by FreeBSD "Left to themselves, things tend to go from bad to worse." - Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
Re: [FUG-BR] C/C++
Bom, o compilador não vai encontrar o conio.h de maneira alguma mesmo porque esse arquivo de cabeçalho é de uma biblioteca específica do Windows. Eu não conheço bem as funções declaradas em conio.h, mas creio que elas devam ser bastante obsoletas. Portanto, procure algo melhor. Sugestões: * Tente estudar C++ ou JAVA invés de C. * Não estude através de qualquer livro que utilize bibliotecas específicas do Win, quanto mais bibliotecas obsoletas. Nunca perca tempo com Herbert Schmit (eu acho que é assim que se escreve). Você tem que ter acesso a alguma biblioteca pública também, mas se não tiver: www.ebooksportal.org e tem muitos livros bons em inglês na rede do emule também. * Não desista do gcc/g++ e do ambiente Linux/FreeBSD. Programar no Windows é muito muito mais difícil na minha opinião. O compilador da MS é um lixo (embora tenha melhorado muito no VS 2005) e conseguir informações em certas áreas é bem mais complicado. Quando você quiser alguma informação sobre uma função no FreeBSD, comece pelo arquivo de inclusão. Bem mais prático, não? * Você não necessitará de uma IDE no FreeBSD já que você pode utilizar o vi ou emacs, mas se necessitar: Anjuta ou NetBeans (com). -- Veja o comentário no arquivo conio.h do Visual Studio 2005: *Purpose: * This include file contains the function declarations for * the MS C V2.03 compatible console I/O routines. -- Se você não quiser escutar a minha sugestão n° 1, tudo bem: Troque a linha 1 por #include Delete a linha 2 e a linha 7 Se você estiver utilizando alguma IDE, invés de getch() tente pausar o programa através de um debugger. 1#include "/usr/include/stdio.h" 2#include "/usr/include/conio.h" 3 4void main (void) 5{ 6puts ("Alo Mundo"); 7getch(); 8} -- gethostbyname Rodrigo Ferreira escreveu: > 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.) > > > eu sei que 1 erro é que ele não esta encontrando o conio.h, mais eu não > consegui localizar ele. > > Alguem poderia me dar um help para tentar compilar isso? > > Grato > - > 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
Re: [FUG-BR] C/C++
On 2/21/07, Rodrigo Ferreira <[EMAIL PROTECTED]> 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. (...) A biblioteca conio.h não existe no padrão ANSI C, é específica do Winblows. Ou seja, você tem que adaptar seu código. - Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
Re: [FUG-BR] C/C++
> Original Message > Subject: [FUG-BR] C/C++ > From: Rodrigo Ferreira <[EMAIL PROTECTED]> > Date: Wed, February 21, 2007 6:46 am > To: freebsd@fug.com.br > > 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.) > > > eu sei que 1 erro é que ele não esta encontrando o conio.h, mais eu não > consegui localizar ele. Voce nao conseguiu localizar ele porque ele nao existe. Recomendo algum livro de programacao para UNIX. $ cat teste.cpp #include int main (void) { puts ("Alo Mundo"); getchar(); } $ g++ -o teste teste.cpp - Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
[FUG-BR] C/C++
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.) eu sei que 1 erro é que ele não esta encontrando o conio.h, mais eu não consegui localizar ele. Alguem poderia me dar um help para tentar compilar isso? Grato - Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd