Índice

Começando a programar em C/C++



BORDER=0 Por que programar em C?

Motivos para aprender C:
0. Pode programar quase tudo em C.
1. Grande quantidade de código fonte disponível na Rede, para os mais diferentes assuntos.
2. Grande quantidade de informações na Rede.
3. Bons compiladores gratuitos na Rede para as mais diversas plataformas.
4. Trata-se de uma linguagem padronizada por um comitê (ANSI-ISO-IEC) e não por apenas uma empresa e isto não impede que a linguagem evolua, pois o padrão pode incorporar novos recursos que foram testados com sucesso pelos fabricantes de compiladores.
5. Existência de canais para esclarecimento de dúvidas (Foruns e Grupos de notícias) freqüentados por profissionais e entusiastas sempre, ou quase sempre, dispostos a ajudar.
6. Existência de bons livros.
7. É uma linguagem madura (mais de trinta anos) e não há porque não esperar que esteja "ativa" ainda por muitos mais anos.



BORDER=0 Aprender a programar em C

Começar a programar em C é uma provação. Se você ainda não conhece nenhuma linguagem estruturada recomendo aprender inicialmente o Pascal, que aliás foi criada com fins didáticos, e é também uma linguagem estruturada. Utilize por exemplo o Turbo Pascal da Borland. Pascal é um excelente começo pricipalmente se você for muito distraído, pois as linguagens C cobram caro as distrações como por exemplo as listadas no tópico seguinte.
Claro que você pode ser um daqueles sujeitos encardidos e quer aprender a programar e em C, na unha, então, vá em frente mas comece devagar, implemente inicialmente uns programinhas beeeeem simples em DOS ou Linux, pois não existe nada pior do que o programa "dar pau" e não se saber se é por causa do algoritmo ou da implementação. O que não ocorrerá se o algoritmo for simples.
De qualquer forma boa sorte!



BORDER=0 Erros comuns ao iniciar em C

São erros que cometi então extrapolei (se ocorreram comigo vale pra todo mundo... :-).
1. Não dobrar o símbolo igual nas *comparações*. Embora seja válido e usual em C a atribuição de uma variável no lugar de uma comparação.
2. Não terminar uma linha de código fonte C com ponto-e-vírgula '; '. Esse é um erro comum, onde o compilador pode chiar muitas linhas abaixo de onde faltou o bendito ';'. Porém os comandos (directivas) para o pré-processador (p.ex.: #define, #ifdef, etc.) normalmente não devem ser seguidos de ponto-e-vírgula.
3. Ao utilizar variáveis do tipo 'double', não utilizar funções matemáticas correspondentes. Por exemplo: utilizar a função 'abs()' para 'doubles' é errado, a função 'abs()' é pra variáveis 'floats', o certo seria utilizar a função 'fabs()'.
4. Não colocar o & (vulgo 'ampersand' ou e comercial) em variáveis numéricas na função 'scanf' e variações. No LCC-Win32 "dá erro" na linha da definição da variável.
Mais erros comuns (em inglês): Ir para www.drpaulcarter.com/cs/common-c-errors.php



BORDER=0 Tutorial da linguagem C do Gordon Dodrill

Para aqueles que querem aprender as linguagens C eis aqui uma sugestão barata. O tutorial foi escrito por Gordon Dodrill e é repleto de pequenos programas exemplos que ilustram o funcionamento da linguagem.
Ir para www.swcp.com/~dodrill/tindex.html
Abaixo os tutoriais em formato .TXT:
Tutorial de Linguagem C: ctutor26.zip (233kb)
Obs.: Para imprimir utilizei o Word com fontes não proporcionais (Courier, acho).
Para comodidade na consulta converti o tutorial para o formato WinHelp: Dodrill.zip (226kb)

O Mr. Dodrill tem também um tutorial de C++, mas não recomendo, estando aliás muito aquém do livro de C++ do Bruce Eckel, vide próximo ítem.

Mas ao invés de tutoriais é interessante considerar investir na compra de um bom livro. O melhor livro, segundo muitos, é o livro do Kernigham e Ritchie, sendo este último o criador da linguagem, o porém é que o livro trata muito da linguagem e pouco da biblioteca padrão, além do que pode ser meio "pesado" como uma primeira leitura, assim pode-se considerar a compra de um livro do tipo "biblia", tenho ouvido maravilhas sobre a bíblia do Herbert Schildt e também da bíblia dos Deitel.



BORDER=0 Livros: Thinking in C++ 2 volumes (((((Gratuito!!)))))

Uma excelente obra de Bruce Eckel. Altamente recomendada.
Ir para o 'site' do livro "Thinking In C++" (Segunda edição).

Obs.: a grande diferença entre as linguagens C e C++ é que C é uma linguagem estruturada enquanto C++ é orientada a objetos, na prática isto significa um modo de pensar bastante diferente, pois em C, a grosso modo, divide-se o problema/programa em funções enquanto que em C++ o problema/programa é dividido em termos de objetos. As vantagens da Programação Orientada a Objetos (POO) é que ela permite uma maior segurança e possibilidade de extensão na utilização de bibliotecas, um grau de abstração maior, facilidade na reutilização do código, etc. Mas alguns livro de C++ ainda destinam-se a programadores C...



BORDER=0 A Página do Wenderson

Página com códigos fontes e informações, boa parte para compiladores da Borland.
Ir para www.geocities.com/casaprog/



BORDER=0 ACCU

É a associação dos usuáros das linguagens C e C++. Achei interessante colocar um 'link' aqui pois tem uma lista dos livros recomendados e não recomendados.
Ir para www.accu.org



BORDER=0 Bibliotecas padrão

A linguagem C tem, pelo padrão C89, as seguintes palavras chaves:

auto extern sizeof

break float static

case for struct

char goto switch

const if typedef

continue int union

default long unsigned

do register void

double return volatile

else short while

enum signed


Para uma linguagem de programação são relativamente poucas palavras chaves, o que torna a construção de compiladores C um pouco mais simples.

Dentre as ações das palavras chaves listadas inexiste, por exemplo, uma que escreva alguma coisa na tela do monitor ou em um arquivo em disco. Para fazermos isto utilizamos bibliotecas, que são extensões da linguagem C.

A utilização de bibliotecas é tão necessária que elas também são padronizada pelo comitê ANSI-IEC-ISO. As bibliotecas padronizadas são as seguintes (C89):

assert float math stdarg stdlib

ctype limits setjmp stddef string

errno locale signal stdio time


Por exemplo, para escrever na tela e ou em um arquivo em disco, podemos utilizar as funções 'printf' e 'fprintf' que fazem parte da biblioteca 'stdio'.

A sigla C89 que utilizei acima se refere ao padrão da linguagem C de 1989. Em 1999 um novo padrão foi liberado, porém os compiladores ainda estão se adaptando ao novo padrão.

Ir para www.dinkumware.com /******TESTAR LINK */



BORDER=0 Bibliotecas - evitando confusão

A utilização de bibliotecas pode levar a problemas estranhos, aparentemente, de difícil solução, assim recomenda-se que estude e entenda, no livro de sua preferência, os seguintes processos:

1. Pré-processamento.
2. Compilação.
3. Linkedição ("Linkagem").

Eu estou(ava) escrevendo um pequeno tutorial sobre isto mas pode-se incluir tanta coisa que fiquei meio perdido...



BORDER=0 Snippets (Gratuito - DOS/LINUX)

Conjunto de códigos fontes de programas e rotinas em linguagem C/C++ que podem poupar muito tempo no desenvolvimento de programas, possui também arquivos com informações para programadores de todos os níveis. Altamente recomendado.
Baixar Snippets.zip (965kb) em ftp.snippets.org



BORDER=0 newsgroups

Se tiver dúvidas quanto a programação em geral consulte os livros e faqs se, ainda assim, não conseguir solucionar a dúvida recorra aos newsgroups:
Ir para uol.mundodigital.linguagens.c_c++ (em português)
Mas pelamordeDeus, detalhe o seu problema, informe qual é o Sistema Operacional, Compilador e a Mensagem de erro dada pelo compilador, se houver, e finalmente a sua dúvida. Sem este tipo de informação fica muito difícil alguém responder qualquer coisa.


Programação C/C++ para DOS



BORDER=0 Compilador DJGPP (Gratuito - DOS)

É um compilador C, C++ e Objective C muito bom, disponível em muitos servidores. Apesar de ser para o ambiente DOS é um compilador 32 bits em modo protegido, tendo muitas ferramentas de desenvolvimento e diversos programas de código aberto produzidos com ele. É a versão DOS do GCC do UNIX.
Ir para o site oficial do DJGPP em www.delorie.com/djgpp/



BORDER=0 Biblioteca Allegro (Gratuito - DOS)

Uma 'library' (bilbioteca, conjunto de funções) muito poderosa para o DJGPP que dá ao programador um grande controle sobre o vídeo, teclado, mouse, joystick e som, contando também com mecanismos para a feitura de uma Interface Gráfica. Além disso suporta uma grande variedade de placas de som e vídeo. Assim, apesar de ser uma 'library' originalmente para jogos, pode servir perfeitamente para criação de programas "sérios". Está sendo portada para o ambiente LINUX/UNIX/Windows.
Ir para www.talula.demon.co.uk/allegro/


Programação C/C++ para Windows



BORDER=0 C para Windows?

Considerando-se que você ainda não programa para Windows vamos esclarecer algumas coisas:
1. Por sua natureza multi-tarefa, os programas Windows não têm acesso direto ao hardware (Vídeo, teclado, mouse, memória, etc.) para tanto utilizam funções do Windows, chamadas API (Applications Programmer Interface).
Obs.: Aqui API (Application Programmers Interface) é um conjunto de funções de suporte para aplicações Windows. Sendo que existem diversas outras APIs que não têm nada a ver com Programação Windows.
2. Em compiladores C++ comerciais (Borland C++, Borland C++ Builder, Microsoft Visual C++, etc.), normalmente, boa parte do tempo não se acessa diretamente a API do Windows, pois utiliza-se as classes C++ destes compiladores (OWL, VCL e MFC, respectivamente), isto pode simplificar enormemente a programação, ao tornar desnecessária muitas operações diretas com a API, e aumentar a reutilização do código. Por estarem entre o programa e o Windows estas classes são chamadas "Layers" (camadas), alguns chamam de "frameworks".
3. Apesar de ser mais fácil programar Windows através de "Layers", muitas vezes é necessário acessar diretamente a API para "personalizar" ou estender uma classe.
Charles Petzold (Guru da programação Windows): "Windows is a complex system; putting a programming layer on top of the API doesn't eliminate the complexity it merely hides it. Sooner or later that complexity is going to jump out and bite you in the leg. Knowing the API gives you a better chance at recovery. "
4. Então a questão não é se você vai utilizar C ou C++, se você utilizará "Layers" ou não, mas sim se você vai aprender a utilizar a API do Windows, e se você quer ser um bom programador Windows, seja em C, C++, Delphi ou Visual Basic, você deve saber utilizar a API do Windows.
5. No meu caso particular eu ainda programo em Windows apenas em C, nada contra C++ mas meus programas geralmente são minúsculos e programar é apenas um hobby.
6. Se ainda não programa em C e/ou em C++, não é recomendável aprender programando para Windows, aprenda para DOS, ou melhor, modo texto primeiro.
7. Aparentemente não existe nenhum *tutorial* abrangente sobre a API-Windows na Web, pois, entre outras coisas, o assunto é bastante extenso, para se ter uma idéia o livro do Charles Petzold sobre o assunto tem 1300 páginas e cobre somente o básico. Tutoriais bem básicos existem.
8. O *livro* do Charles Petzold pode ser encontrado em sua versão eletrônica na Rede. Caso julgue que o seu direito à informação é mais importante do que os direitos autorais do autor e da editora, procure por 'petzold.chm' ou 'petzoldi.chm' e boa sorte!
9. Um livro não muito conhecido é o de Herbert Schildt, "Programando em Windows 95 - Segredos e soluções", McGraw-Hill, este livro não explica muita coisa (é o básico do básico), mas serve como um excelente 'Quick start' pra quem como eu não se anima muito em encarar o calhamaço do Petzold de início. Um programador C razoável devorá-o em menos de uma semana.
10. Pode-se misturar programas C com Visual Basic e Delphi através de DLLs. Deve dar um trabalho misturar os tipos de dados mas é uma opção.



BORDER=0 Lcc-Win32 (Gratuito - Win95/98/NT)

É um compilador C 32 bits para Windows gratuito, acompanha também um editor de caixas de diálogo e um editor de cursores, ícones e figuras bitmap (vulgos recursos de um prog. Windows). Indicado para aqueles que já programam em C mas que não têm experiência em programação Windows (API), claro que acompanhado de um bom livro. Não é demais lembrar que pode-se compilar C tanto com o Borland C++ como com o Visual C++. Porém uma vantagem do LCC-Win32 é que acompanha a documentação. Outras vantagens são a produção de executáveis bastante compactos, ser (muito) mais fácil configurar o compilador do LCC-Win32, sua velocidade de compilação e principalmente é Gratuito.
Ir para a Página Oficial do LCC-Win32 (Baixe toda a documentação) (http://www.cs.virginia.edu/~lcc-win32/)
Uma página dedicada ao LCC-Win32 onde vale a pena dar uma boa fuçada: Ir para 'The LCC-Win32 - MEETING POINT'.
Uma página dedicada à instalação do LCC-Win32 (Normalmente não é preciso consultá-la): Ir para 'LCC-Win32 Installation Page'.



BORDER=0 Códigos fontes

Na página do John Findlay tem uma coleção de código fonte C para Win32: www.john.findlay1.btinternet.co.uk/
De imediato são para serem compilados pelo LCC-Win32, mas com pouca ou nenhuma alteração são compilados por outros compiladores Win32.



BORDER=0 A documentação do LCC-Win32

A documentação do LCC-Win32 pode ser uma boa leitura, onde o autor, Jacob Navia, conta um pouco da aventura que é manter este compilador e os programas de apoio.



BORDER=0 MingWin

Eu particularmente sou fã do LCC-Win32, mas caso precise de uma compilador C++ para ambiente Win32 e/ou grandes otimizações no código resultante, ei-lo aqui.
MingW é um compilador GNU (GCC - GNU C/C++ Compilers), se já conhece o GCC pode ser uma boa opção, compila tanto C quanto C++.
A documentação é basicamente a mesma do GCC, tendo-se que consultar o faq do MingWin. Baixe também a documentação do Lcc-Win32 referente a API do Windows!
O porém é que o compilador de recursos não é dos melhores, mas com algumas gambiarras contorna-se esta limitação...
Ir para www.mingw.org



BORDER=0 C++ Builder

C++ Builder é um sistema de programação Windows em C++ muito mais amigável.
Apesar de ser um sistema comercial a revista PC Expert em sua 15a (+-agosto/2000) edição liberou a versão 3 (de 1998) deste, fico devendo maiores informações pelo simples fato de ainda não ter fuçado no dito cujo.



BORDER=0 OllyDebuger (Gratuito - Win)

É um bom 'debuger' gratuito, mas carece de um manual tendo que se aprender a utilizá-lo na base da tentativa-e-erro. Serve tanto pra "debugar" como para fuçar código "assembly" alheio. Consegue reconhecer a biblioteca C do Borland C++ 5.x, ou seja mostra os respectivos 'labels'.
Ir para home.t-online.de/home/Ollydbg



BORDER=0 Bibliotecas

Biblioteca: DISLIN (DOS/Windows/Linux)
Uma biblioteca para plotagem de dados científicos (gráficos de funções). Versões para uma grande variedade de compiladores (C/Fortran/etc) e plataformas, inclusive para Lcc-Win32 (Gratuita), o que a torna altamente portável.
Também pode gerar saídas em arquivos nos formatos PostScript, Windows Metafile, etc.
Ir para o 'site' da biblioteca gráfica DISLIN. (http://www.linmpi.mpg.de/dislin/).

Biblioteca: NishitaView
1. Biblioteca para abrir arquivos gráficos nos formatos: JPG, JIF, GIF, BMP, DIB, RLE, TGA, PCX.
2. Podendo salvar no formato JPG.
3. Pode-se personalizar o diálogo para 8 idiomas diferentes, inclusive português.
4. É uma DLL, podendo ser utilizada em Visual Basic, Delphi, C/C++, etc.
5. É gratuita e completamente funcional.
6. Não abre todo e qualquer arquivo Jpg!!
Ir para nishita.com


Programas que podem ser úteis



BORDER=0 ExamDiff (Win32 - Gratuito)

Um programa extremamente útil para comparar arquivos texto.
Ir para www.nisnevich.com/examdiff/examdiff.htm



BORDER=0 Anim8or (Gratuito - Win32)

É um animador de objetos tridimensionais. Mas o que me pode ser interessante é a possibilidade de exportar modelos (objetos) em arquivos para serem incorporados a programas C, especialmente se for para utilizar OpenGL ou Mesa, no site do programa tem um pequeno exemplo (mas se for utilizar outro compilador que não o VC++ requer alguns ajustes).
Ir para www.anim8or.com.

Sob o Windows 95 o programa, pelo menos no meu caso, não funciona direito.

Este é um pequeno exemplo distribuido no site do Anim8or, adaptado para que compile com outros compiladores que não o Visual C++:
a8viewer_ansi.zip (12,6kb)



BORDER=0 Object Outline (Win32 - Gratuito)

Este é um programa para documentar código fonte em C++, podendo produzir documentos em HTML, RTF e RTF para Winhelp.
Ir para www.bbeesoft.com



BORDER=0 LCLint (DOS/Linux - Gratuito)

LCLint é uma ferramenta para verificar código fontes de programas em C. Ele é muito mais exigente que os compiladores gerando por isso um número enorme de "Warnings", podendo ser útil. Verifiquei uns programinhas que já funcionavam e aprendi mais um pouco de C.
Para instalar é preciso definir as variáveis de sistema LARCH_PATH e LCLIMPORTDIR, normalmente isto é feito no Autoexec.bat. Por exemplo na minha instalação:
set LARCH_PATH=D:\LINT\LCLINT-2.5Q\LIB;D:\LINT\LCLINT-2.5Q\IMPORTS
set LCLIMPORTDIR=D:\LINT\LCLINT-2.5Q\IMPORTS
Ir para lclint.cs.virginia.edu



BORDER=0 UPX - Compactação dos Executáveis (DOS 32bits/Win/Linux)

Compactador de arquivos executáveis e bibliotecas.
Ir para wildsau.idv.uni-linz.ac.at/mfx/upx.html ou
Ir para www.nexus.hu/upx ou
Ir para upx.tsx.org


Diversos



BORDER=0 O compilador e a linguagem Small C

Small C é uma linguangem C só que com algumas limitações, seria um C- -.
Original de um trabalho de Ron Cain na revista 'Dr. Dobbs' e continuado por muitos outros programadores. James E. Hendrix (um dos que continuou o trabalho de desenvolvimento do compilador) publicou um livro chamado 'A Small C Compiler: Language, Usage, Theory, and Design' (1990) da editora 'M&T Publishing', explicando a construção do compilador numa abordagem didática.

Encontrei compiladores Small C que compilam pra sistemas baseados no Z80, MC8031, e 8088. Alguns incluem 'assemblers' e 'linkers'.
Faltou citar as deficiências do Small C: não suporta estruturas, uniões, tipos longs, tipos floats, tipos doubles, além disso utiliza o método antigo de definição de funções.
Na página do 'link' abaixo encontram-se diversas variações do compilador Small C.
Ir para cpm.interfun.net/small_c.html


Índice
rymaeda@yahoo.com
http://www.ioxio.com.br