Índice
Começando
a programar em C/C++
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.
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!
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
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.
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...
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/
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
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 */
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...
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
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
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/
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
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.
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/)
Exemplos: alguns fontes de
programas para o LCC-WIN32. Tenho outros mas são
de livros e protegidos por 'Copyright'.
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'.
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.
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.
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
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.
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
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
ExamDiff (Win32 - Gratuito)
Um programa extremamente útil para comparar arquivos texto.
Ir para
www.nisnevich.com/examdiff/examdiff.htm
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)
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
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
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
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