Beruflich Dokumente
Kultur Dokumente
C
Use a Cabea! C possivelmente pode acabar sendo o melhor livro de C de todos os tempos. Eu poderia facilmente visualiz-lo se tornando o livro didtico padro para curso de faculdade sobre C. A maioria dos livros sobre programao segue um caminho relativamente previsvel. Este livro, por outro lado, utiliza uma abordagem completamente diferente. Ele te ensina a ser um verdadeiro programador em C. Dave Kitabjian, diretor de Desenvolvimento de Software, NetCarrier Telecom Use a Cabea! C uma introduo acessvel e animada programao em C, no clssico estilo da srie Use a Cabea!. Figuras, piadas, exerccios e laboratrios guiam o leitor suavemente, porm de forma constante, pelos fundamentos de C... antes de avanar para tpicos mais avanados de programao em sistemas Posix e Linux. Vince Milner, desenvolvedor de software
Use a Cabea! C
No seria maravilhoso se existisse um livro sobre C que fosse mais fcil de entender do que o manual de operao de um nibus espacial? Acho que apenas um sonho...
os autores
David Griffith
Dawn Griffiths
David Griffiths comeou a programar aos 12 anos de idade, quando viu um documentrio sobre o trabalho de Seymour Papert. Aos 15, ele escreveu uma implementao da linguagem computacional de Papert, o LOGO. Depois de estudar matemtica na universidade, comeou a escrever cdigo para computadores e artigos de revista para humanos. Ele trabalhou como coach de metodologias geis, programador e atendente de garagem, mas no nesta ordem. David Griffiths pode escrever cdigo em mais de dez linguagens, e prosa em apenas uma, e, quando no est escrevendo, programando, ou trabalhando como coach, ele passa a maior parte do seu tempo livre com sua adorvel esposa e coautora, Dawn.
Antes de escrever Use a Cabea! C, David escreveu dois outros livros Use a Cabea!: Use a Cabea! Rails e Use a Cabea! Programao.
Dawn Griffiths comeou a vida matemtica em uma universidade top do Reino Unido, onde foi premiada como primeira da classe de licenciatura. Ela passou a seguir uma carreira em desenvolvimento de software e tem mais de quinze anos de experincia na indstria de Tecnologia da Informao.
Antes de juntar foras com David em Use a Cabea! C, Dawn escreveu outros dois livros Use a Cabea! (Use a Cabea! Estatstica e Use a Cabea! Geometria 2D) e tambm trabalhou em muitos outros livros da srie. Quando Dawn no est trabalhando, voc a ver aprimorando suas habilidades de Tai Chi, correndo, confeccionando renda de bilro, ou cozinhando. Ela tambm curte viajar e passar o tempo com seu marido, David.
viii
contedo
Contedo Resumido
Introduo 1 2 2.5 3 4 5 6 7 8 9 10 11 12 i ii Comeando com c: Mergulhando de cabea Memria e ponteiros: Para o que est apontando? Strings: Teoria de strings Criando ferramentas pequenas: Faa uma coisa e faa-a bem Usando mltiplos arquivos fonte: Desmonte e reconstrua C Lab 1: Arduino Structs, unions e bitfields: Criando suas prprias estruturas Estruturas de dados e memria dinmica: Construindo pontes Funes avanadas: Aumente suas funes para onze Bibliotecas estticas e dinmicas: Cdigo Hot-Swappable C Lab2: OpenCV Processos e chamadas de sistema: Quebrando limites Comunicao entre processos: bom conversar. Sockets e redes: No h lugar como 127.0.0.1 Threads: um mundo paralelo C Lab 3: Blasteroids Sobras: As dez melhores coisas (que no cobrimos) Tpicos C: Reviso geral xxvii 1 41 83 103 157 207 217 267 311 351 389 397 429 467 501 523 539 553
Contedo
Introduo
Seu crebro sobre C. Aqui voc est tentando aprender algo;
enquanto isso, aqui est o seu crebro lhe fazendo o favor de se certificar de que o aprendizado no role. Seu crebro est pensando: melhor deixar espao para coisas mais importantes, como quais animais selvagens evitar e se praticar snowboarding pelado uma m ideia . Ento, como voc engana seu crebro para que ele pense que sua vida depende de conhecer C? A quem se destina este livro? Sabemos o que voc est pensando Metacognio: Leve sua mente submisso Leia-me Reviso tcnica Agradecimentos xxviii xxix xxxi xxxiii xxxiv xxxvi xxxvii voc est aqui X ix
contedo
comeando com c
Mergulhando de cabea
Quer entrar de cabea no computador? Precisa escrever um
cdigo de alta performance para um novo jogo? Programar um Arduino? Ou usar aquela biblioteca de terceiros avanada no seu app de iPhone? Se for o caso, ento C est aqui para ajudar. C funciona em um nvel muito mais baixo que outras linguagens; ento, entender C te d uma ideia muito melhor do que realmente est acontecendo. C at pode te ajudar a entender melhor outras linguagens. Ento, mergulhe de cabea, pegue seu compilador, e voc comear em pouco tempo. C uma linguagem para programas pequenos e rpidos Mas o que um programa C completo parece? Mas como voc executa o programa? Dois tipos de comandos Aqui est o cdigo at agora Contar cartas? Em C? H mais em booleanos que igual... Como est o cdigo agora? Usando o velho switch s vezes, uma vez no o bastante... Loops frequentemente usam a mesma estrutura... Use break para fugir... Sua Caixa de Ferramentas C 2 5 9 14 15 17 18 25 26 29 30 31 40
contedo
2
2
memria e ponteiros
Para o que est apontando?
Se voc realmente quer arrasar com C, voc precisa entender como C gerencia memria. A linguagem C lhe
d muito mais controle sobre como seu programa usa a memria do computador. Neste captulo, voc ir abaixo da superfcie e ver exatamente o que acontece quando l e cria variveis. Voc aprender como arrays funcionam, como evitar desagradveis desastres de memria e, mais importante que tudo, ver como dominar ponteiros e endereamento de memria chave para se tornar um programador fera em C. Cdigo C inclui ponteiros Escavando na memria Navegue com ponteiros Tente passar um ponteiro para a varivel Usando ponteiros de memria Como passar uma string para uma funo? Variveis array so como ponteiros... O que o computador pensa quando executa seu cdigo Mas variveis array no so exatamente ponteiros. Porque arrays na realidade comeam no 0 Por que ponteiros tm tipos? Usando ponteiros para entrada de dados Tome cuidado com scanf() fgets() uma alternativa para scanf() 42 43 44 47 48 53 54 55 59 61 62 65 66 67 72 74 80 81
GLOBAIS
CONSTANTES
LINK A6, #VARSIZE MOVEM.L DO-D7/A1-A5, (SP) MOVE.L SP, SAVESTK(A6) MOVE.L SP, SAVEAS(A6) MOVE.L GRAFGLOBALS(A5), AO
String literais nunca podem ser atualizadas. Se for modificar uma string, faa uma cpia. Memorizador de memria Sua Caixa de Ferramentas C
xi
contedo
strings
Teoria de strings
Existe mais em strings do que apenas a leitura. Voc viu
como strings em C so, na realidade, arrays de char, mas o que C te deixa fazer com elas? Isto , quando string.h entra em jogo. string.h uma parte da Biblioteca Padro do C que dedicada manipulao de strings. Se quiser concatenar strings, copiar uma string para outra ou comparar duas strings, as funes em string.h esto sua disposio. Neste captulo, ver como criar um array de strings e, depois, ver exatamente como realizar buscas em strings usando a funo strstr(). Procura-se Frank desesperadamente Crie um array de arrays Encontre strings contendo o texto de busca Usando a funo strstr() T na hora de revisar o cdigo Array de arrays vs. array de ponteiros Sua Caixa de Ferramentas C 84 85 86 89 94 98 101
xii
contedo
xiii
contedo
xiv
contedo
C Lab 1
Arduino
Voc sempre quis que suas plantas pudessem te dizer quando precisam ser regadas? Bem, com Arduino elas podem! Neste lab, voc criar um monitor de planta alimentado por Arduino todo programado em C.
xv
contedo
xvi
contedo
xvii
contedo
funes avanadas
Aumente suas funes para onze
Funes bsicas so timas, mas s vezes voc precisa de mais. At agora, voc tem se concentrado no bsico. Mas
e se precisar de ainda mais poder e flexibilidade para conseguir o que quer? Neste captulo, voc ver como aumentar o QI do seu cdigo passando funes como parmetros. Voc descobrir como organizar as coisas com funes de comparao. E, finalmente, descobrir como fazer seu cdigo muito flexvel com funes com argumentos variveis. Procurando o Sr. Certo... Passando cdigo a uma funo Voc precisa dizer para find() o nome de uma funo. Todo nome de funo um ponteiro para a funo... ...mas no existe tipo de dados function Como criar ponteiros para funes Organize-se com a Biblioteca Padro C Use os ponteiros para funes para pr as coisas em ordem. Automatizando as cartas da agncia de namoro Crie um array de ponteiros para funes Faa sua funo flexvel Sua Caixa de Ferramentas C 312 316 317 318 319 320 325 326 334 338 343 350
xviii
contedo
xix
contedo
C Lab2
OpenCV
Imagine se seu computador pudesse ficar de olho na sua casa, enquanto voc est fora, e te dizer quem tem perambulado por a. Neste lab, voc criar um detector de intrusos base de C usando a astcia do OpenCV.
xx
contedo
xxi
contedo
10
xxii
contedo
11
sockets e redes
No h lugar como 127.0.0.1
Programas em mquinas diferentes precisam conversar. Voc aprendeu como usar I/O para se comunicar com arquivos
e como processos na mesma mquina podem se comunicar entre si. Agora voc vai precisar entrar em contato com o resto do mundo e aprender como escrever programas em C que podem conversar com outros programas do outro lado da rede e do outro lado do mundo. Ao terminar este captulo, voc ser capaz de criar programas que atuam como servers e programas que atuam como clientes. O servidor de internet knock-knock Viso geral do servidor knock-knock BLAB: como servidores conversam com a internet Um socket no um tpico fluxo de dados s vezes o servidor no inicializa corretamente. O motivo pelo qual sua me sempre mandou verificar seu trabalho Lendo dados do cliente O servidor s pode falar com uma pessoa por vez. Voc pode fork() um processo para cada cliente Escrevendo um cliente web Clientes que mandam Crie um socket para um endereo IP getaddrinfo() pega endereos para domnios Sua Caixa de Ferramentas C 468 469 470 472 476 477 478 485 486 490 491 492 493 500
xxiii
contedo
12
threads
um mundo paralelo
Frequentemente programas precisam fazer diversas coisas ao mesmo tempo. Threads POSIX podem fazer seu cdigo
mais interativo, separando alguns segmentos de cdigo para serem executados em paralelo. Mas tenha cuidado! Threads so ferramentas poderosas, mas voc no quer que elas entrem em coliso. Neste captulo, voc aprender como colocar sinais de trnsito e marcadores de pista que iro prevenir um acidente de cdigo. No final, voc saber como criar threads POSIX e como usar mecanismos de sincronizao para proteger a autenticidade de dados sensitivos. Tarefas so sequenciais... ou no... ...e processos no so sempre a soluo Processos simples fazem uma coisa de cada vez Contrate funcionrios extras: use threads Como se criam threads? Crie threads com pthread_create. O cdigo no seguro para threads Voc precisa acrescentar sinais de trnsito Use mutex como sinal de trnsito Sua Caixa de Ferramentas C 502 503 504 505 506 507 512 513 514 521
A
Varivel compartilhada
B
xxiv
contedo
C Lab 3
Blasteroids
Neste lab, voc far um tributo a um dos videogames mais populares e de longa vida entre todos. Est na hora de criar Blasteroids!
xxv
contedo
sobras
As dez melhores coisas (que no cobrimos)
Mesmo depois de tudo aquilo, ainda tem mais um pouquinho. Tem mais algumas coisas que achamos que voc precisa
saber. No nos sentiramos bem ignorando-as, mesmo que precisem de uma breve meno, e ns realmente queremos lhe dar um livro que voc possa carregar sem treinamento intensivo na academia do bairro. Ento, antes de guardar este livro, leia estes acrscimos. 1. Operadores 2. Diretivas do pr-processador 3. A palavra-chave static 4. Qual o tamanho das coisas 5. Testes automatizados 6. Mais sobre gcc 7. Mais sobre make 8. Ferramentas de desenvolvimento 9. Criando GUIs 10. Material de referncia 540 542 543 544 545 546 548 550 551 552
ii
xxvi
Tpicos C
Reviso geral
Voc j quis que todos aqueles timos fatos sobre C estivessem em um s lugar? Essa uma reunio de todos os
tpicos e princpios de C que apresentamos no livro. D uma olhada e veja se consegue se lembrar de todos. Cada fato tem o captulo de origem ao lado, ento fica fcil procurar a referncia se precisar de um lembrete. Talvez voc at queira destacar estas pginas para colocar na sua parede.