You are on page 1of 815
2 Cc Completo e Total 3a Edicao Revista e Atualizada Herbert Schildt Traducao e Revisto Técnica Roberto Carlos Mayer Diretor da Mayer & Bunge Informética Prof. do Departamento de Cigncia da Computagao da USP-SP MAKRON Books Ltda. Rua Tabapua, 1.348 — Itaim-Bibi 747 — Lapa (CEP 04533-004 — Sao Paulo — SP CEP 05065-110— Sao Paulo — SP (11) 3849-8604 e (11) 3845-6622 (11) 3611-0740 e-mail: makron@books.com.br fax (11) 3611-0444 Siio Paulo + Rio de Janeiro * Ribeirdo Preto + Belém * Belo Horizonte + Brasilia * Campo Grande Cuiabéi + Curitiba + Floriandpolis + Fortaleca * Goidnia * Manaus + Porto Alegre + Recife + Salvador Brasil » Argentina * Colmbia * Costa Rica * Chile * Espanha * Guatemala + México * Pere + Porto Rico * Venezuela Do original C: The Complete Reference — Third Edition Copyright © 1995 McGraw-Hill, Inc Copyright © 1987 Makron Books do Brasil Editora Ltda. Todos os direitos para a lingua portuguesa reservados pela Bditora McGraw-Hill, Ltda, e Makron Books do Brasil Editora Lida. Nenhuma parte desta publicagie podera ser reproduzida, guardada pelo sistema “retrieval” ou transmitida de qualquer modo ou por qualquer outro meio, seja este eletrOnico, mecinico, de fotocépia, de gravagio, ou outros, sem prévia autorizacio, por escrito, das Editoras. EDITOR: MILTON MIRA DE ASSUMPGAO FILHO Produtora Editorial: Joana Figueiredo Produtor Gréfico: José Roberto Petroni Editoragao Eletronica: E.R.J. Informatica Ltda Dados de Catalogagao na Publicagao (CIP) Internacional (Camara Brasileira do Livro, SP, Brasil) Schildt, Herbert C, completo e total - 3! edicgdo revista e atualizada Herbert Schildt ; tradugdéo e revisdéo técnica Roberto Carlos Mayer. Sao Paulo : Makron Books, 1996. rence Titulo original: C: the complete re ISBN 85-346-0595-5 1. C (Linguagem de programagdéo) I. 6-0491 CDD-005.133 indices para catalogo sistematic 1. C : Linguagem de programacdo : Computadores Processamento de dados 005.133 Sumario © Que Ha de Novo Nesta Edicéo Dn XXIV O Que Ha n0 LivIO eccecetesstevtevssevesevestsesess : XXV Parte 1 — A Linguagem C0... 0s. eeeseeeeee sence tence eeeeneaneaee 1 1, Uma Visdo Geral de Co... ce seseeees sence ceca eeeee eens aeeree 3 As Origens de C 3 C E uma Linguagem de Médio Nivel . 5 4 CE uma Linguagem Estruturada ..... venteeeee cee 5 C E uma Linguagem para Programadores 7 Compiladores Versus Interpretadores . . 9 A Forma de um Programa em C ..... sete cee A Biblioteca ea Linkedigado .......... 000000 esceee eer 1 Compilagdo Separada ... 0.6... 06 00sec eve eee eeeeee eee cee 212 Compilando um Programa em C ..... 6.6... 000 eee eeeeeeeeeees se © Mapa de Memoria de C 13 C Versus C++ .. bebe tee et een teeeeee 14 Um Compilador C++ Funcionaré com Programas C? ...... cece D5 Uma Revisdo de Termos eee a eee 2. Expresses EMC... 0... e cece eee cece tenet eee e eee eee ee eee 16 Os Cinco Tipos Basicos de Dados 16 Modificando os Tipos Basicos .. 17 Nomes de Identificadores . 19 Varidveis 0.0000 c ce eeeee cece eeeeee : eo 20 VI C= Completo ¢ Total Onde as Varidveis Sao Declaradas Varidveis Locais Parametros Formais Variaveis Globais ... Modificadores de Tipo de Acesso const . 20 voiatile dores de Tipo de Classe de Armazenamento A Varidveis static : 7 Variaveis register Inicializagao de Variaveis Constantes . . Constantes Hexadecimais e Octais Constantes String Constantes Caractere de Barra Invertida Operadores . O Operador de Atribuicao Conversio de Tipos em Atribuigoes: Atribuigdes Multiplas . Operadores Aritméticos Incremento e Decremento . Operadores Relacionais e Logicos Operadores Bit a Bit O Operador ? .... 5 Os Operadores de Ponteiros & e* .... O Operador em Tempo de Compitacio s O Operador Virgula ... : Os Operadores Ponto () e Seta (>) Parénteses e Colchetes Como Operadores Resumo das Precedéncias Expressdes Ordem de Avaliagao : Conversio de Tipos em Expresses. Casts Espagamento e Parénteses C Reduzido izeof . Comandos de Controle do Programa . Verdadeiro e Falso em C bev eeveeeeseeceeeteevevtreeeees Comandos de Selegio beeteteenee if ifs Aninhados beeecens A Escada if-else-if .... feveeens O? Alternativo. . Sumo vil A Expresso Condicional ...... vec eeeteeeeettte ete t ttt e eee es 69 switch es 70 Comandos switch Aninhados ........0cc0s 0s veceeeeees 74 Comandos de Iteragdo . feetteeeees coven 74 O Lago for eee cece beeen voveeetnee 74, Variacées do Lago for .. teens ee .-76 O Lago Infinito 2... eee cece eee peer - 80 Lagos for sem Corpos pee neneeernrs eee ceceeeee BL O Lago while ee BT O Lace do-while - 84 Comandos de Desvio 85 O Comando return . 285 O Comando goto ... +86 © Comando break . 86 A Funcao exit)... - 88 © Comando continue - 89 Comandos de Expressées : feeee vee 91 Blocos de Comandos ......60066062000000 . cece OL Matrizes @ Strings .... 0.6.6 e cece cece cece eee ee ee teen cree es OD Matrizes Unidimensionais . ..... peer ceee eee 92 Gerando um Ponteiro para uma Matriz ee cece OM Passando Matrizes Unidimensionais para Fungdes .......... 02... cee DM Strings 96 Matrizes Bidimensionais ---98 Matrizes de Strings ...... 102 Matrizes Multidimensionais uG 104 Indexando Ponteiros = 105 Inicializagao de Matriz ..... bee 107 Inicializagao de Matrizes Nao-Dimensionadas ...... pubepnonecdl) Um Exemplo com o Jogo-da-Velha seer : 109 Ponteiros .........++ ee eee Bee eee eee eee eee eer atts) O Que Sao Ponteiros? ......... - pees 5 ceeeeegils) Varidveis Ponteiros settee oe 5 cee IB Os Operadores de Ponteiros ceteee ails Expressdes com Ponteiros 116 Atribuicao de Ponteiros ceeeees voce teteseteeneeeees 116 Aritmética de Ponteiros bocce ttetettteeteeeeeetersereeteeeess 116 Comparagao de Ponteiros . 118 Ponteiros e Matrizes ....... Bboeoneee coe ween 120 Matrizes de Ponteiros .........0....5 cevceee eee : 2121 Indiregao Multipla . ern weveeee 122 Inicializagao de Ponteiros .. : wo 124 Ponteiros para Fungées ... : poe08H ee 126 Vit C — Completo e Total As Fungées de Alocagao Dinamica em C 128 Matrizes Dinamicamente Alocadas 130 Problemas com Ponteiros. 133 L7. Jospocnousoapepbononnsoccodenocondonsupsuopanoonoo0 EL) A Forma Geral de uma Fungdo .....0606022 502+ 138 Regras de Escopo de Fungées ; 5 139 Argumentos de Fungdes . 139 Chamada por Valor, Chamada por Referéncia . 140 Criando uma Chamada por Referéncia 141 Chamando Fungdes com Matrizes 142 argc e argv — Argumentos para main() 147 O Comando return 5 150 Retornando de uma Fungao .. : 150 Retornando Valores .... 152 Fungdes Que Devolvem Valores Nao-Inteiros 154 Prototipos de Fungdes -- 156 Retornando Ponteiros = 158 Fung@es do Tipo void - 159 © Que main) Devolve? - 160 Recursao . 160, Declarando uma Lista de Parametros de Extensio Variavel +162 Declaracao de Parametros de Fungdes Moderna Versus Classica 162 Questdes sobre a Implementacio : - 164 Parametros e Fungoes de Propésite Geral 164 Eficiéncia 164 Bibliotecas e Arquivos v2 165 Arquivos Separados vee 165 Bibliotecas . : 165 De Que Tamanho Deve Ser um Arquivo de Programa? . 166 Estruturas, Unides, Enumeracées e Tipos Definidos pelo Usuario .... 167 Estruturas . 167 Referenciando Elementos de Estruturas 169 Atribuicao de Estruturas 170 Matrizes de Estruturas 171 Um Exemplo de Lista Postal 171 Passando Estruturas para Fungies 179 Passando Elementos de Estrutura para Fungoes . 179 Passando Estruturas Inteiras para Funcées . . 180 Ponteiros para Estruturas cee feces = 182 Declarando um Ponteiro para Estrutura ...... 00.22.22. - 182 Usando Ponteiros para Estruturas .... : : =. 182 Matrizes e Estruturas Dentro de Estruturas 185, Campos de Bits 186 Sumério IX Unides eee eee e eee ee beeen eee . eeeeeeeeee eens Enumeragbes BapaeHo eo! Usando sizeof para Assegurar Portabilidade ........ Beene od typedef Seen eee eter eee eee cee ety o6) B. E/S pelo Console .........e0eeeee eens eee Erneta re aber Lendo e Escrevendo Caracteres eee ee eee roo Um Problema com getchar() ......... 200 Alternativas para getchar() .......... +200 Lendo e Escrevendo Strings .........0605 2201 E/S Formatada pelo Console « beveeveestsseeetteseeerternaeseer ©1203 printf0 5 beceeeteveeeee ees 1.204 Escrevendo Caracteres : sete +205 Escrevendo Niimeros ........ : beceeetee +. 205 Mostrando um Endereco voce vceneteete reese e206 O Especificador fon .....-..-. veveee ee 207 Modificadores de Formato. . beveveeeeee ees 207 O Especificador de Largura Minima de Campos... 0. . = 207 O Especificador de Precisd0 ........00s00ceeecseeeeessesseeseeeess 209 Justificando a Saida....... vette ttttnteeeeeens cece ee 210 Manipulando Outros Tipos de Dados : 210 Os Modificadores * ¢ # 5 210 seanf()........... 2 Especificadores de Formato .......s....5 : 212 Inserindo Nuimeros ..... cee 212 Inserindo Inteiros sem Sinal_ feeteeteettnteeeeeeeseterseee 213 Lendo Caracteres Individuais com sean{).........0000000+ 213 Lendo Strings ... feetevtcnneernens eee 213 Inserindo um Endereco |... 24 O Especificador % occ 215 Utilizando um Scanset 215 Deseartando Espacos em Branco Indesejados . 216 Caracteres de Espaco Nao-Branco na String de Controle .............-..--.216 Deve-se Passar Enderegos para seanf() .......0000c00seecseeeeeeeeeeeersees216 Modificadores de Formato Suprimindo a Entrada 9. E/S com Arq See eee eee ee eee eee Eee ee Teri o) E/S ANSI Versus E/S UNIX ceveeeeseeees cece eee 219 217 218 E/S em C Versus E/S em C++ : : +220 Streams e Arquivos . , : 220 Streams ... : 220 Streams de Texto oo .s.ccss. eee nrrereer en 221 Streams Binérias ..... : beettteeeees 221 Arquivos ...... 1221 C— Completo.e Total Fundamentos do Sistema de Arquivos ..........0000006000ecceceeeeeeeee ee 222 O Ponteiro de Arquivo Bopode . veer 2B Abrindo um Arquivo veces cover e een 224 Fechando um Arquivo sevens fever eee e e225 Escrevendo um Caractere : ; - 226 Lendo um Caractere +226 Usando fopen0), getc(), putc() e fclose() tees +227 Usando feof() . . +228 Trabalhando com Strings: ‘puts e fgets vee 230 TeWINd() 2.0... ccc eeeeeeeeeeeeeeeeteeetseeeeeeteeeetretectterereeseese231 ferror() ....... beet t tt nttreeeeees eee 232 Apagando Arquivos ..........2-00005 ceteees ceceeeee nee 234 Esvaziando uma Stream beeen b ce tnteeteeeteeee tener 235 fread() e fwrite() coven 235 Usando fread() e fwrite) : 5 235 fseek() e E/S com Acesso Aleatério ceceeeeeee e242 fprintf) e fscanf) coven eee MB As Streams Padrao 2245 ‘A Conexio de E/S pelo Console . . 245 Usando freopen() para Redirecionar as Streams Padro.......s...... 246 O Sistema de Arquivo Tipo UNIX ...... feeeeees veeeeee e247 open() fees feet e cet trsneeteeeeeeen ere 1 248 creat() . : . coven 249) close) . sees wees foe cee 249) read() e write() vee ceeeeeeteetteeeeeteeteee rere 250 unlink() : eee veteees 222251 Acesso Aleat6rio Usando Iseek() beet eeeennnneeeeeeeee ees 252 |. © Pré-processador de C e Comentarios .......- 200s eee cere eens 254 O Pré-processador de Co... fees seen 254 define .. vette ete tcvtneeeeeeseeeener ee 0285 Definindo Macros Semelhantes a FungSes....0..0cccccscse beeeeee 1287 #error +258 include : veces 1 . Diretivas de Compilagao Condicional beseeeeeee veeeee e259 Hif, Helse, Helif e #endif ..............005 feeteeecevenrreeeeneesess1259 Hifdef e Hite 00... eeeeee eee fesse 261 #undef .. cove vc tevvsseetesteeteettnereaees 262 Usando defined 263 Hine . ve tet ee tecvttreeeeeteteeteesttttsteteetertreeesersss 2264 fipragma....... fete teteestreeereesenneee sees +264 Os Operadores # © ## do Pré-processador veeetneeeeeeeetee 2+ 264 Nomes de Macros Predefinidas ........2.200c00ccseeseceseeeeeennnsteeees+ +266 Comentarios 00.6... coe cece eee eeeseceneceeeteecteesenet nese oces - 266 Sumdrio XI Parte 2 — A Bibl teca C Padréo 11, Linkedigéo, Bibliotecas e Arquivos de Cabecalho O Linkeditor Compilagdo Separada . Cédigo Relocavel ...... Linkeditando com Overlays Linkeditando com DLLs A Biblioteca C Padrao Arquivos de Biblioteca Versus Arquivos-Objetos . Arquivos de Cabecalho . beeeee Macros em Arquivos de Cabecalho Redefinigdo das Fungées da Biblioteca . 12, Fungoes de E/S.....-... pee eer 13. Fungées de String e de Coracteres ........ 4.065 14, Fungdes Mateméticas ....... 66... cece eee cee eee e eee eee a 15. Fungées de Hora, Data e Outras Relacionadas com o Sistema... 16. Alocagéo Dinémica.......... 6.005 Pee Eee eee eee Cee eereer 17. Fungées Graficas e de Texto .... 60.6 e ee ece ee eee ee eee ent enene 442 18, Fungdes Miscelaneas .............-0--0 06 Seen cece eee eevee .. 472 Parte 3 — Algoritmos e Aplicagées ...... 19. Ordenagéo e Pesquisa .. peer Ordenacao Tipos de Algoritmos de Ordenacao Uma Avaliagio dos Algoritmos de Ordenacao A Ordenagao Bolha — O Deménio das Trocas .. Ordenacao por Selecéo Ordenacao por Insergio Ordenagées Melhores Ordenacao Shell Quicksort Escolhendo uma Ordenagao Ordenando Outras Estruturas de Dados Ordenagao de Strings ....... Ordenacao de Estruturas : Ordenando Arquivos de Acesso Aleatorio em Disco Pesquisa . Métodos de Pesquisa xi C—Completo e Total Pesquisa Seqiiencial feet coer BBB Pesquisa Bindtia - eee 23 20. Filas, Pilhas, Listas Encadeadas e Arvores Bindrias .............. 525 Fila oo... fee tteeeee oe - 526 A Fila Circular... vevceeeees ve 531 Pilhas bette teteeee serene Sas) Listas Encadeadas Hoobddnb popun0606 540 Listas Singularmente Encadeadas Listas Duplamente Encadeadas Um Exemplo de Lista Postal Arvores Bindrias . 21. Matrizes Esparsas ...... ‘A Matriz Esparsa com Lista Encadeada da Abordagem com Lista Encadeada | A Abordagem com Arvore Binaria para Matriz Esparsa Anélise da Abordagem com Arvores Binétias ‘A Abordagem com Matriz de Ponteiros para Matriz Esparsa Andlise da Abordagem com Matriz de Ponteiros de Hashing ... Escolhendo uma Abordagem . 22, Andlise de Expressées e Avaliagao ........+- Expressdes : Dissecando uma Expressio Anilise de Expressio .. : Um Analisador Simples de Expressdes Acrescentando Variaveis ao Analisador . Verificagao de Sintaxe em um Analisador Recursive Descendente 23. Solucdo de Problemas de Inteligéncia Artifical ........ Representacao ¢ Terminologia Explosies Combinatorias Técnicas de Pesquisa Avaliagao das Pesquisas Uma Representacao Grafica : A Pesquisa de Profundidade Primeiro .. i Uma Analise da Pesquisa de Profundidade Primeiro .. A Pesquisa de Extensdo Primeiro .... sees Uma Anidlise da Pesquisa de Extenso Primeiro Adicionando Heuristicas . A Pesquisa da Escalada da Montanha Anélise da Escalada da Montanha Sumario Xi A Pesquisa por Menor Esforgo ee vette bee 635) Andlise da Pesquisa por Menor Esforgo feet tenet n ee ee terre 636 Escolhendo uma Técnica de Pesquisa cece eee 637 Encontrando Multiplas Solugdes » 637 526 Remogao de Percurso eee eee 638 Remogao de NO . : 639 Encontrando a Solucéo Ideal 645 De Volta as Chaves Perdidas ... votes 651 24. Construindo o Esqueleto de um Programa Windows 95 ........... 655 A Perspectiva da Programagao Windows 95 ; = 656 O Modelo da Mesa de Trabalho . : ++ 656 O Mouse .......ceeeeeeeerreeeee betes cree e687 [cones e Mapas de Bits 657 Menus, Barras de Ferramentas, Barras de Status e Caixas de Didlogo 657 Como Windows 95 e Seu Programa Interagem 658 Windows 95 Usa Multitarefa Preemptiva 659 A API Win32: A API de Windows 95 ....... 659 Os Componentes de uma Janela ...... : : cee 660 Nocées Basicas sobre Aplicagées Windows 95. -661 WinMain() . . wee eee eee . . 661 A Fungao de Janela.........0000ccsevveseee veeees cece 662 Classes de Janelas 00.0.0... 662 A Repeticio de Mensagens . on 663 Os Tipos de Dados Windows .. ao 663 Um Esqueleto Windows 95 664 Definindo a Classe de Janela 667 Criando uma Janela 669 A Repeticio de Mensagens 671 A Fungao de Janela feeetevereeteteeteeteessrerses e673 Usando um Arquivo de Definicao Serene peeeereer Oc Convenes sobre Nomes 0... .....:::ccceeeee feeee eee 674 Parte 4 — Desenvolvimento de Software Usando C............00+4++ 677 25. Interfaceamento com Rotinas em Linguagem Assembly ........... 679 Interface com a Linguagem Assembly ...... : 679 As Convengdes de Chamada de um Compilador C 681 ‘As Convengdes de Chamada do Microsoft C/C++ 681 Criando uma Fungao em Cédigo Assembly +683 Uma Fungao Simples em Cédigo Assembly 683 Um Exemplo de Chamada por Referéncia 688 Utilizando 0 Modelo de Meméria Grande para Dados Codigo 690 Criando um Esqueleto de Cédigo Assembly ............5 ves 692 xiv C— Completa ¢ Total ‘Usando asm 7 = 694 Quando Codificar em Assembler. - 695 26. Engenharia de Software Usando C .... 6... cece cece eee s OIF Projeto em Top-DOWN 2.0... 000.2 00 eeeeeeeeee eee oo Delineando Seu Programa cee 698 Escolhendo uma Estrutura de Dados . .. 699 Fungoes a Prova de Bala .........- 700 Usando MAKE . 703 Usando Macros com MAKE cet eetteeeee ees 707 Usando um Ambiente Integrado de Desenvolvimento 708 , Portabilidade e Depuragao .......... 66.0.6. 05 ++ 710 710 Os Operadores de Incremento ¢ Decremento seteteeeeteeeeereee TIT Utilizando Variaveis em Registradores .............. 712 Ponteiros Versus Indexagao de Matrizes .......... 715 Uso de Fungées 716 Programas Portavei .720 Usando #define beens see . 1 72D Dependéncias do Sistema Operacional «0.0... .s..-. 721 Diferencas no Tamanho dos Dados ; 722 Depuragéo 723 Erros de Ordem de Processamento . 1 7B Problemas com Ponteiros .. 2.724 Erros Bizarros de Sintaxe ..............4... eee wes 726 Erros por Um ... 727 Erros de Limites . -728 Omissio de Prototipo de Funcio. 729 Erros de Argumentos 730 Colisées entre a Pilha eo Heap . 731 Teoria Geral de Depuragio 731 A Arte da Manutencao de Programas ............... 1733 Consertando Erros oe 733 Protegao do Cédigo-Fonte -734 Parte 5 — Unt Interpretador ©... 2... .ccc eee eceee ence eee enees 737 28, Interpretadores C...... 6c cece cece e eee ens ees eee e ene e ens 139 A Importancia Pratica dos Interpretadores ... See 740 A Especificagio de Little C i -7AL Uma Restricao Importante de Little C ...... 742 Interpretando uma Linguagem Estruturada 743 Uma Teoria Informal de C 744 Expressées C 745

You might also like