ebook img

C: A linguagem de programação - Padrão Ansi PDF

149 Pages·1989·90.792 MB·Portuguese
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview C: A linguagem de programação - Padrão Ansi

I. 'J'I (I Dooriginal: TheCProgrammingLanguageSecondEdition Copyright©1978.PrimeiraEdi1'80,1988SegundaEdil'80byPrentice-Hallin ©1989,EditoraCampusLtda. TodososdireitosreservadoseprotegidospelaLei5988de14/12173. Nenhumapartedestelivre,semautorlzacaopreviaporescritodaeditora,podera serreproduzidaautransmitidasejamquaistoremosmetesempregados: eletronicos,mecanicos,fotogrcificos,grava'YaoDUquaisqueroutros. Todo0astorcofoifeitoparafornecaramaiscompletaeadequadaintorrnacao. Contudoaeditoraeo(s)autor(es)naoassumemresponsabilidade pelosresultadoseusadalntorrnacaofornecida.Recomendamosaos leltorestestaraintormacaoantesdesuaefetivautilizacao. Capa OtavioStudart Copidesque JorgeUranga Editora~aoEletronice o RJ Fotccornposicao mundo da computacao passou por uma revolucao desde apublicacao da Revisao Gretice primeira edicao original deste livro em 1978,Grandes computadores sao muito MariadoRosarioC.Lpes PauloHenriqueBrandao maiores, eoscomputadores pessoais possuem capacidades que competem com os KatiaReginaA.R.daSilva degrande portededezanosarras.Durante estetempo, 0Ctarnbemmudou, embora ProjetoGretico EditoraCampusLtda. nao tanto, eespalhou-se por muito alem de suasorigens como linguagem do sis AQualidadedalntorrnacao. tema operacional UNIX_ RuaSetedeSetembro,111- 16'andar 20050-002RiodeJaneiroRJBrasil Acrescente popularidade doC, asmudancas dalinguagem com0passardos Telefone:(21)3970-9300FAX(21)2507-1991 anoseacriacao decompiladores por grupos naoenvolvidos noseuprojeto, foram E-mail:[email protected] fatores que demonstraram a necessidade de uma definicao contemporanea mais IS~N85-7001-586-0 precisada linguagem doqueaquela apresentada naedicao anterior deste livro,Em (Ediyaooriginal:ISBN0-13-110362-8,Prentice-Hall,EnglewoodCliffs,N.J.) 1983,0American National Standards Institute(ANSI) estabeleceu urncomite cujo objetivo foi.produzir "uma definicao dalinguagem Cnao-ambigua eindependente FichaCatalogratica de maquina", retendo ainda seu espfrito. 0 resultado e0padrao ANSI para 0C. CIP-Brasil.Catalcqacao-na-Ionte. o SindicatoNacionaldosEditorssdeLivros,RJ padrao formaliza asconstrucoes queforam mencionadas masnaodescritas . na primeira edicao, particularmente a atribuicao e enumeracoes de estrutura, Ele Kernighan,BrianW. prove uma nova forma de declaracao defuncao, que pennite achecagem cruzada K47c C,alinguagemdeproqrarnacao:padraoANSI1 BrianW.Kernighan.DennisM.Ritchie;traducaoDanielVieira. dadefinicao com 0uso_Eleespecifica umabiblioteca-padrao, comurngrande con RiodeJaneiro:Campus,1989. junto de funcoes para executar entrada esaida, gerenciamento dememoria, mani pulacao de cadeias e tarefas semelhantes. Ele torna preciso ocompOitamento de Traducaode:TheCprogramminglanguage.20ded. Apsndices. caractensticasrque nao foram totalmente descritas na definicao original, e ao ISBN85-7001-586-0 mesmo tempo afirma explicitamente que aspectos da linguagem permanecem de 1.C(Linguagemdeproqrarnacaodecomputador).2.Linguagem pendentes de maquina. deproqramacao(Computadores).I.Ritchie,DennisM.,1941. II.Titulo. Esta edicao deCALinguagem deProgramacdo descreve 0Cdomodo com que foidefinido pelopadrao ANSI. (Quando foiescrita, 0padrao estava nos esta 89-0283 CDD-001.6424 gios finais darevisao publica; deve ter sidoaprovado aofinalde 1988,Asdiferen CDU- 800.92C casentre 0queestasendoescrito aquieaforma finaldevem sermfnimas.)Embora 01 02 03 04 16 15 14 13 tenhamos notado oslugares onde alinguagem sedesenvolveu, escolhemos escre ver exclusivamente no novo formato. Na maior parte, isso nao faz uma diferenca significativa; amudanca mais visivele0novoformato dedeclaracao edefinicao de funcoes. Oscompiladores modemos ja daosuporte amaioria dascaracteristicas do padrao, e Tentamos reter 0tamanho de texto daprimeira edicao. C nao uma grande linguagem, enao estabern servida por urngrande livro. Melhoramos aexposicao das caracteristicas criticas, como apontadores, que saocentrais aprogramacao em C. Melhoramos os exemplos originais, e inclufrnos novos exemplos em diversos cupuulos. Por exernplo, 0 tratamentodedccluru<;(S xnuplicadus aum'Iltudt>por programasqueconvertemdeclaracoesempalavrasevice-versa. Comoantes, todos os,ex~mplosforamtestados diretamentepelotexto, 0queestaemformaIcgfvelpor rnaquma. oApendice A, 0manual dereferencia, naoe0padrao, masnossatentativa AD C: LlNGUAGEM DE PROGRAMAf;AO de transmitir 0essencial do padrao em urnespaco menor. Ele foifeito visando a uma.melhorcomp~eensiiopelosprogramadores, masnaocomoumadefinicao para e escntores decompI~a~or- esse,rapelpertenceaopropriopadrao. 0 Apendice B urnresumo das facilidades da biblioteca-padrao, Ele tambem servede referencia aosprogram~dores, enaoaosimplementadores dalinguagem. 0 Apendice Ceurn resumo conCISOdas mudancas com relacao itversao original. Como dissemos noprefacio itprimeira edicao, C "responde bernitmedida queaexperiencia comelacresce". Com aexperiencia demaisumadecada ainda pensamos assim. Esperamos que este livro0ajude aaprender Ce usa-la bern. e ~_!amosprofundamente agradecidos aamigos que nosajudaram aproduzir C uma linguagem deprograrnacao de fmalidade geral quepermite econo estaedicao, JonBentley, DougGwyn, DougMcilroy, PeterNelsoneRobPikenos. mia de expressao, modemos fluxos de controle e estruturas de dados e urn rico e deram comentarios perceptivos sobrequasetodasaspaginas dosmanuscritos. So conjunto de operadores. C nao uma linguagem de "muito alto nivel", nem mos.gratospelaleitura cuidadosa deAlAho, DennisAllison, JoeCampbell, G. R. "grande" enemespecfficaparaumaareadeaplicacaoparticular. Mas, suafaltade Emlin, KarenFortgang, Allen Holub, Andrew Hume, DaveKristol, John Linder restricoesesuageneralidade tomam-na maisconveniente eeficazparamuitastare ~an,p~ve Pro~ser,Gen~Spafford eChris VanWyk. Tarnbem recebemos suges fasdo que liflguagens supostamente mais poderosas. toes uteis ?e Bill Cheswick, Mark Kernighan, Andy Koenig, Robin Lake, Tom Cfoioriginalmente projetada paraserimplementada nosistemaoperacional Lo~don, JimReeds, Clovis Tondo ePeterWeinberger. DaveProsserrespondeu a UNIXnoPDP-II daDEC, porDennisRitchie. 0 sistemaoperacional, 0compila muitas perguntas detalhadas sobre 0padrao ANSI. Usamos bastante 0tradutor dorCeessencialmente todososprogramas deaplicacaodoUNIX (incluindotodo0 C+ + deBjame Stroustruppara0testelocaldosnossosprogramas, eDaveKristol softwareusadoparaprepararapresentetraducao)saoescritosemC. Compiladores nosdeuurn~ompiladorANSI Cpara0testefinal. Rich Drechsler nosajudou bas deproducao tambem existem para varias outras maquinas, inclueindo 0IBM Sys tante com aimpressao da versao em ingles. tem/360, Honeywell 6000, e0Interdata8/32.C,entretanto, nao ligadaanenhum e Nossossinceros agradecimentos atodos. hardware ou sistema particular, e facilescrever programas querodarao semmu dancas em qualquer rnaquina que aceite alinguagem C. Brian W. Kernighan Estelivropropoe-se aauxiliar0leitoraaprendercomo programar emC.Ele contem umaintroducao atravesdeexemplos paraqueusuaries novatospossam ser Dennis M. Ritchie iniciados0maiscedo possivel, capftulos separadosparacadaumadascaracterfsti e casprincipais, e urnmanual de referencia, A maioria do tratamento baseada na leitura, escrita erevisao deexemplos, ao invesde meras definicoes deregras. Na maior parte, os exemplos saoprogramas reais completos, aoinvesdefragmentos isolados. TOOosos exemplos foram testados diretamente a partir do texto, que existeemformalegfvelpormaquina.*Apesardemostrar-comofazerusoefetivoda linguagem, tambem tentamos, onde possfvel, ilustraralgoritrnostiteiseprincfpios de born estilo e born projeto. o e livro nao urnmanual introdutorio deprogramacao; elepresume alguma farniliaridade com conceitos basicos deprogramacao taiscomo variaveis, coman dos de atribuicao, lacos efuncoes. No entanto, urnprogramador novato deve ser capazdele-loeaprender alinguagem, embora 0contatocom urncolegacom mais conhecimento podera serutil, . * Napresentetraducao,todososprogramasforamtestadosemurncornpiladorTurboC,versao1,0, apresentandoresultadosidenticosaotexto.Seissonaoacontecer,farernosreferencianosdevidos locais.(N.doT.) Em nossa experiencia, Cternprovado serumalinguagem agradavel, expres e sivaeversatil paraumagrande gamadeprogramas. Suaaprendizagem facileela respondebernamedidaqueaexperiencia comelacresce. Esperamos queestelivro o ajude ausa-la bern. , Ascriticasconstrutivas esugest6esdeamigosecolegasacrescentaram muito a este livro e ao nosso prazer em escreve-lo. Em particular, Mike Bianchi, Jim Blue, StuFeldman, Doug McIlroy, BillRoome, Bob Rosin eLarry RosIer leram miiltiplas versoes com cuidado. Nos tambem devemos muito a Al Abo, Steve Bourne, Dan Dvorak, Chuck Haley, Debbie Haley, Marion Harris, Rick Holt, Steve Johnson, John Mashey, Bob Mitze, Ralph Muha, PeterNelson, Elliot Pin son, Bill Plauger, Jerry Spivack, Ken Thompson ePeter Weinberger por comen C("ll)~ C; II" J\ tarios uteisemvariosestagios do trabalho eaMike Lesk eJoe Ossanna pela ('~~JI)\(' . .assistencia incalculavel na impressao da versao ern ingles, Brian W. Kernighan Capitulo 1 Dennis M. Ritchie UMA INTRODUC;::AOATRAVESDE EXEMPLOS................... S 1.1 lnicio.................................................................................. 5 A\'1.2 Variaveis eExpress6es Aritmeticas 8 1.3 0 Comando For.................................................................... 13 Jcl.4 Constantes Simb6licas............................................................. 14 1.5 Entrada eSaida deCaracteres 15 1.6 Vetores 21 I.7 Fun<,:oes........................ . 23 1.8 Argumentos - Chamada por Valor............ 26 1.9 VetoresdeCaracteres :. 27 1.10 Variaveis Externas eEscopo........ 30 Capitulo 2 TIPOS, OPERADORES E EXPRESSOES .. 3S 2.1 Nomes deVariaveis ; . 35 2.2 Tipos deDados eTamanhos . 36 2.3 Constantes . 37 r 2.4 Declaracoes . 39 2.5 Operadores Aritrneticos . 40 2.6 Operadores Relacionais eL6gicos .. 41 2.7 Convers6es deTipos . 42 2.8 Operadorcs de Incremento eDecremento .. 45 2.9 Operadores L6gicos Bit-a-Bit . 47 2.10 Operadores eExpressoes de Atribujcao .. 49 2.11Express6es Condicionais ~ . 50 2.12 Precedencia eOrdem deAvaliacao . 51 Capitulo 3 FLUXO DE CONTROLE .. S3 3.1 Comandos eBlocos . 53 3.2 If-Else . 53 3.3 Else-If . 54 .4 witch . 56 3.S Laces - While eFor .. 57 3.6 Lac s- Do-While . 60 17 Br uk ontlnu .. 61 :l.R Clut , ,~ (1110 . 62 Capitulo 8 Capitulo 4 A INTERFACE COM 0 SISTEMA UNIX . 173 FUN<;OES EESTRUTURA DE PROGRAMA 65 8.1 Descritores deArquivos .. 173 4.1 Conceitos Basicos 65 8.2 Entrada eSaida de BaixoNivel- ReadeWrite .. 174 4.2 Funcoes que Retornam ValoresNao-Inteiros................................. 69 8.3 Open, Creat, Close, Unlink .. 176 4.3 VariaveisExternas 71 8.4 Acesso Rand6mico - Lseek .. 178 4.4 RegrasdeEscopo 77 8.5 Exemplo - Uma Implementacao deFopen eGetc . 179 4.5 Arquivos deCabecalho.v.,; 79 8.6 Exemplo - Listagem de Diretorios . 183 4.6 VariaveisEstaticas 79 8.7 Exemplo - UrnAlocador de Memoria .. 189 4.7 VariaveisemRegistradores 81 4.8 Estrutura deBloco 82 Apendice A 4.9 Inicializacao......................................................................... 82 MANUAL DE REFERENCIA . 195 4.10Recursividade........ 84 Al Introducao , .. 195 4.110 Pre-Processador C 86 A2 Convencoes Lexicas .. 195 A3 Notacao Sintatica .. 199 Capitulo 5 A4 Significado dos Identificadores .. 199 APONTADORES E VETORES............................................. 91 A5 Objetos eLvalues ~ .. 201 5.1 Apontadores eEnderecos......................................................... 91 A6 Conversoes . 202 5.2 Apontadores eArgumentos deFuncoes ."~........... 93 A7 Expressoes . 205 5.3 Apontadores eVetores '.............. 96 A8 Declaracoes .. 216 5.4 Aritmetica com Enderecos . 99 A9 Comandos . 231 5.5 Apontadores deCaractere eFunC6es........................................... 102 AIODeclaracoes Externas .. 235 5.6 VetoresdeApontador; Apontadores Para Apontadores 106 All Escopo eLigacao .. 238 5.7 VetoresMultidimensionais 109 AI2 Pre-processamento . 239 5.8 Inicializacao de Vetoresde Apontadores :. 111 AI3 Gramatica t.·.· . 246 5.9 Apontadores VersusVetoresMultidimensionais 112 5.10Argumentos da Linha deComando ::::::::::::::::::::::::::::: 113 Apendice B 5.11Apontadores Para Funcoes :................... 117 BIBLIOTECA-PADRAO .. 255 5.12DeclaracoesComplicadas :................................................. 121 Bl Entrada eSaida: <stdio.h > .. 255 B2 TestesdeClasse de Caractere: <ctype.h > . 264 Capitulo 6 B3 Funcoes de Cadeia: <string.h > .. 265 ESTRUTURAS 127 B4 Funcoes Maternaticas: <math.h > .. 266 B5 Funcoes Utilitarias: <stdlib.h > .. 267 6.1 Elementos Basicos.................................................................. 127 B6 Diagnosticos: <assert.h > .. 270 6.2 Estruturas eFunC6es............................................................... 129 6.3 VetoresdeEstruturas l33 B7 Listas deArgumentos Variaveis: <stdarg.h > , .. 271 B8 Saltos Nao-Locais: <setjmp.h > , .. 271 6.4 Apontadores Para Estruturas 137 B9 Sinais: <signal.h > .. 272 6.5 Estruturas Auto-Referenciadas 139 BIOFuncoes de Data eHera: <time.h > .. 272 6.6 Pesquisa emTabela.. 144 B11 Limites Definidos Pela Implementacao: <limits.h > e <float.h > .. 275 6.7 Typedef ......... ;..................................................................... 146 6.8 Uni6es................................................................................. 148 Apendice C 6.9 Campos de Bit...................................................................... 150 RESUMO DAS MUDAN<;AS . 277 Capitulo 7 INDI.CE REMISSIVO ; . 281 ENTRADA E SAiDA 153 7.1 Entrada eSaida-Padrao 153 7.2 Saida Formatada - Printf 155 7.3 Listas deArgumentos deTamanho Variavel.................................. 157 7.4 Entrada Formatada - Scanf 159 7.5 Acesso aArquivos 162 7.6 Tratamento deErro - Stderr eExit............................................ 165 7.7 Entrada eSaida de Linhas ·.................................. 167 7.8 Alguma. FuncOesDiver II 168 e e C uma linguagem deprogramacao definalidade geral. Ela estreitamente associada aosistema operacional UNIX, jaquefoidesenvolvida neste sistema, eja e "queUNIX estaescrito em C. A linguagem, entretanto, nao atada aurn sistema operacional ouauma maquina emparticular, e, embora tenha sidochamada "lin guagem de programacao de sistemas" devido asua utilidade nodesenvolvimento decompiladores esistemas operacionais, ~laternsido usada, igualmente, para es crever grandes programas em muitas areas diferentes. Muitas dasideias importantes doCoriginam-se dalinguagem BCPL, desen volvidaporMartin Richards. Ainfluencia doBCPL noCprosseguiu indiretamente atraves dalinguagem C, que foiescritapor KenThompson em 1970para0primei ro sistema UNIX no PDP-7 da DEC. BCPL eBsao linguagens "sem tipo". Ancontrario, Cprove uma serie de tipos dedados. Ostipos fundamentais saocaracteres, inteiros emimeros deponto flutuante dediversos tamanhos. Alem disso, existe uma hierarquia de tipos de da dosderivados criados com apontadores, vetores, estruturas eunioes, Asexpressoes saoformadas comoperadores eoperandos; qualquer expressao, inc1uindoumaatri buicao ouchamada defuncao, pode serurncomando. Apontadores saofornecidos para aritmetica de endereco independente da maquina. Cprove asconstrucoes fundamentais de fluxo de controle exigidas por pro gramas bern estruturados: agrupamento de comando, tomada de decisao (if-else), selecao de urn dentre urnconjunto de casos possiveis (switch), laces com teste de termino no topo (while,for)ou no fundo (do), e saida antecipada do laco (break). As funcoes podem retomar valores de tipos basicos, estruturas, unioes ou ponteiros. Qualquer funcao pode serchamada recursivamente. Asvariaveis locais saonormalmente "automaticas", oucriadas novamente acadachamada. Asdefi nieces defuncao podem nao serendentadas mas asvariaveis podem serdec1aradas em uma forma de estrutura de bloco. As funcoes de urn programaem C podem existir em arquivos-fonte separados, compilados separadamente. As variaveis po dem ser intemas a uma funcao, extemas mas conhecidas somente dentro de urn unico arquivo-fonte, ou visfveis ao programa inteiro. Urnpasso de pre-processamento executa substituicao de macro notexto do programa, inclusao de outros arquivos-fonte, ecompilacao condicional. Ceuma linguagem derelativo "baixo nfvel' .Estacaracterizacao naoades merece; istosimplesmente significa queCmanipula 0mesmo tipodeobjetos que a maioria dos computadores, tais como caracteres, mirneros eenderecos. Estes po- delll.' rcombin "Jos numipulu 10. '0111" IIJ '1IdOl S II;IIII tlcos logicos lISuui:-. PO' d dudos, Os pro' n qu u,run 'III bibli teca pard intern i m. 0111lIlII implem ntadospelas maquinasatuuis. sistema "dacasa" possu mcomportamcntocompatfvelasscgurado. Amaicrp 11 C nlioprove operacoes para manipular diretamente objetos c mposto tais da biblioteca 6 intimamente moldada na "biblioteca de EJS-padriio" do sist.cmI como cadeias de caracteres, conjuntos, listas ou vetores considerados como urn UNIX. Estabibliotecafoidescritanaprimeiraedicao, eternsidoamplamente utili todo. Alinguagem naodefme nenhuma facilidadeparaalocacaodemem6ria outra zada tambem em outros sistemas. Novamente, amaioria dos programadores niio que adefinicao estatica eadisciplina depilha fomecidas pelasvariaveis locais de vera muita mudanca. . funcoes; naohamonte (heap) oucoletadelixo. Finalmente, Cnaoprove facilida Como ostiposdedados eestruturas decontrole doCsaosupol1ad~sdireta- desdeentradaesaida:naohacomandos READ ouWRITE, nemmetodos deaces mentepela maioria dos computadores, abi?lio~a em tempo de e~ecuc;ao.n~s soaarquivos. Todosesses mecanismos devem serfomecidos porfuncoes explici sariaparaimplementar programas autocontidos epequena. Asfuncoesdablbli~te tamente chamadas. A maior parte das implementacoes de C inclui urna colecao ca-padrao saochamadas somentedeformaexplicita, demodoq~epodemserevita razoavelmente padronizada dessas funcoes. das senaoforem necessarias. Amaiorpartedelaspode serescnta emC, e, exceto De forma semelhante, C oferece somente construcoes simples de fluxo de pelos detalhes do sistema operacional que ~lasocultam, ~iioportateis. e controle:testes, laces, agrupamentos esubprograrnas, masnaomultiprogramacao, Embora C equipare-se com as capacidades de muitoscomputadores, ela operacoes paralelas, sincronizacao ou co-rotinas. independente dequalquer arquiteturademaquinaemparticular. Comurnpoucode e e, Embora afaltadealgumas dessasfacilidades possa parecer uma grave defi cuidado muito facilseescrever programas portateis, isto programas que pos ciencia ("Voce quer dizer que eu tenho que chamar uma funcao para comparar sam serrodados sem alteracoes em urna serie de hardware diferente. 0 padrao duascadeias decaracteres?"), amanutencao dalinguagem emdimens6es modes toma explicitos os problemas deportabilidade, e prescreve urnconjunto de cons e tas tern trazido beneffcios reais. Como C e relativamente pequena, ela pode ser tantes que caracterizam amaquina em que 0programa rodado. e a descrita em urnpequeno espaco, e aprendida rapidamente. Podemos esperar que Cnao urnalinguagem com verificacao rigorosadetipos, mas medida em c:. urnprograrnador conheca e entenda, e atemesmo use regularmente alinguagem que foievoluindo, suachecagem de~PO{oifo~eci~. A_def~c;iio original_do inteira. desconfiou, masperrnitiu0intercambio deponteirose~telfOS;lSSOdes<!eentao!~l Por muitos anos, a definicao do C foi 0manual de referencia da primeira eliminado, eo padrao agoraexigeasdeclarac;6es.apropnadas econversoes e~plicl edicao original deste livro. Em 1983, 0 American National Standards Institute tasquejahaviam sidoforcadas pelosbons compila~ores. As~ova:'declaracoes.de (ANSI)estabeleceuurncomite paraproverumadefinicao modema eabrangente do funcao siiournoutropasso nestadirecao. Oscompiladores a~lsarao ~obreamaior C.A definicao resultante, 0padriioANSI, ou "ANSI C", deve tersidoaprovado parte doserros dedigitacao, e nao existe conversao ~utomauca de upos dedados aofmal de 1988.Amaioria das caracterfsticas dopadraoja ternsuportepor com incompativeis. Apesar disso, Cretem afilosofia b~lca de qu~os Pr.?grama~~res piladores modemos. sabem 0que estao fazendo; ela so pede que eles digam suas mtencoes explicita- o e padrao baseadonomanualdereferenciaoriginal. Alinguagem foirelati mente. vamente poucoalterada;uma dasfmalidadesdopadriiofoiassegurarqueamaioria C, como qualquer outralinguagem, ternsuasfalhas. Algunsoperadores rem dospadr6es existentes continuassem validos, ou, seissofalhasse, que oscompila a precedencia errada; algumas partes da sintaxe poderiam ser ~elhores '.No en dores pudessem produzir avisos quanto aonovo comportamento. tanto, Cternprovado seruma linguagem extremamente expressiva eefetiva para Para amaior parte dos prograrnadores, a mudanca mais importante e uma uma grande variedade de aplicacoes. . o e e novasintaxeparadeclararedefmirfuncoes. Urnadeclaracao defuncaopode agora resto dolivro organizado como segue. 0 Capitulo 1 uma introducao it e incluirumadescricaodosargumentos dafuncao;asintaxededefinicao sealterade parte central do C atraves de exemplos. A fmalidade fazer com q~~0leitor.se forma correspondente. Esta informacao extra facilita bastante a deteccao pelos inicietaorapidoquantopossfvel, poisacreditamos firmemente queaurncamanena compiladores de argumentos sem correspondencia; em nossa experiencia, este e deaprender urnanova linguagem eescrevendo programas nela. Aintrodu~o pre urnacrescimo muito uti!alinguagem. sumeurnconhecimento pratico doselementos basicosdeprogramacao; naoM ex Haoutraslinguagens empequena escala. Aatribuicao deestrutura easenu plicacoes sobrecomputadores, compiladores ou0significado deumae.x~~o do meracoes, quehaviamestadoamplamente disponiveis, agorafazemparteoficialda tipo n=n+1. Embora tenhamos tentado, ondePOSSIVel,mostrar tecnicas uteis de linguagem. Oscalculosempontoflutuantepodemagoraserfeitosemprecisao sim programacao, 0livro niioobjetiva serurntrabalho dereferencia em estruturas .de ples. Aspropriedades daaritmetica, especialmente para tiposnaosinalizados, sao dados ealgoritrnos; quando forcados auma escolha n6snosconcentramos nalin- esclarecidas. 0 pre-processador emaiselaborado. Amaiorpartedessas mudancas guagem. c: teraapenas pequenos efeitos para a maioria dos prograrnadores. OsCapftulos 2a6discutem variosaspectosdo maisde~~dameDte eurn Umasegundacontribuicao significativadopadriioeadefinicaodeumabibli pouco mais formalmente que 0Capitulo 1,embora aenfase seja amdaem exem otecaacompanhando 0C.Elaespecifica funcoes para acesso aosistemaoperacio plosdeprogramas uteis, completos, aoinvesdefragmentos isolados. 0 Capitulo 2 nal(porexemplo, paraleregravar arqulvos), entrada esaidaformatada, alocac;iio lidacom ustiposdedados basicos, operadores eexpress6es. 0 Capitulo 3tratade de mem6ria, manipulac;iiode cadeias decaracteres, ecoisas dessetipo. Urncon fluxodecontrole: if~lse,while,for,etc. 0 Capitulo4cobrefun~ eestruturas de as programa _ variaveis extemas, regras deescopo, multiplos arquivos-fonte, e as- junto decabec;alhos-padriioda urnacessouniforme declarac;6esdefunc;6eseti- 3 2 strn por diant .0 Capftulo S discut upoutudorcsearibn6UcuCClIII\Hlllh ((0 • Capitulo6contemdetalhcsdecstruturas uniees. o Capitulo 7descreve abiblioteca-padrao, queprove uma int rfa comum e para 0sistema operacional. Esta biblioteca definida pelo padrao ANSI, devendo UMA INTRODUC;Ao sersuportada em todas as maquinas que rodam 0C, de forma que programas que ATRAvtSDEEXE~LOS usam-na paraentrada, safdaeoutrasfuncoes dosistema podem sertransportados de urn sistema para outro essencialmente sem qualquer mudanca. o Capitulo 8descreve ainterface entreprogramas Ceo sistema operacional UNIX, concentrando-se em entrada e safda, sistema de arquivos, e alocacao de arrnazenagem. Embora uma parte destecapitulo sejaespecffica para 0UNIX, pro gramadores quenao estejam usando UNIX devem ainda encontrar material util nele, inclusive alguma luz sobre como uma versao da biblioteca-padrao e imple mentada e sugest6es para obter codigo transportavel. o Apendice A contem urn manual de referencia da linguagem. 0 relatorio Vamos comecar com uma rapida introducao aoC.Nosso objetivo emostrar oficial dasintaxe esemantica do Ceo proprio padrao ANSI. Esse documento, no oselementos essenciais dalinguagem emprogramas reais, massemesrniucar deta entanto, foi feito para ser usado principalmente para escritores de compilador. 0 lhes, regras formais, eexcecoes, Neste ponto, naoestamos tentando sercompletos manual dereferencia aquitransmiteadefinicao dalinguagem maisconcisamente e ou mesmo precisos (salvo os exemplos, que sao corretos). Queremos leva-lo, tao sem 0 mesmo estilo legalista. 0 Apendice B e urn resumo da biblioteca-padrao, rapido quanta possfvel, aoponto onde voce possa escrever programas uteis; deve novamente para usuaries aoinvesdeimplementadores. 0 Apendice Ceurnpeque mos, portanto, nos concentrar nos elementos basicos: variaveis econstantes, arit noresumo das mudancas com relacao alinguagem original. Em casos de duvida, metica, fluxo decontrole, funcoes eosrudimentos deentrada esaida, Intencional as noentanto, 0padrao e0proprio compilador permanecem como, autoridades fi mente, deixamos defora nestecapitulo facilidades doCque saodevital importan nais sobre alinguagem. cia para escrever programas maiores. Isto inclui apontadores, estruturas, a maior parte dorico conjunto de operadores C, varios comandos defluxo de controle, ea biblioteca-padrlio. Esteenfoque temsuasdesvantagens. 0 maisnotavel eque0tratamento com pleto de algum aspecto da linguagem nao eencontrado num unico local, eo capi tulo, por serbreve, pode tambem confundir. Eja queosexemplos naopodem usar opoder total do C, eles nao sao concisos eelegantes quanto poderiam ser. Tenta mos minimizar esses efeitos, mas.esteja prevenido. Uma outra desvantagem eque os proximos capftulos necessariamente repetirao alguma parte deste. Esperamos que arepeticao ajude mais do que atrapalhe. Emtodo caso, programadores experientes devem sercapazes deextrapolar 0 material deste capitulo para suasproprias necessidades deprogramacao. Iniciantes deveriam suplementa-lo, tentando pequenos programas, similares aos deste capi tulo. Ambos os grupos podem usa-lo como infra-estrutura na qual se acoplam as descricoes mais detalhadas que iniciamos no Capitulo 2. 1.1 Inicio Aunica forma de aprender uma nova linguagem deprogramacao eescrever programas nesta linguagem. 0 primeiro programa aescrever e0mesmo em todas as linguagens: Imprima aspa/avras primeiro programa Este e0obstaculo basico: para salta-lo vocedeve sercapaz decriar0texto dopro grarna em algum lugar, compila-lo com sucesso, carrega-lo, executa-lo ever para onde suaresposta foi. Uma vezaprendidos estesdetalhes mecanicos, tudo0maise relativamente facil. 4 5 Em C, 0programa para imprimir "primeiroprograma" e: main normalmente invocara outras funcoes para desenvolver seu trabalho, algumas doproprioprograma, outras debibliotecas de funcoes previamente escri #include <stdio.h> tas. Aprimeira linhado programa, #include <stdio.h> main() { diz ao compilador para incluir informacao sobre a biblioteca-padrao de entrada/ printf ("primeiro programa\n"); saida; esta linha ap~e_ no inicio de muitos arquivos-fonte em C. A biblioteca padrao edescrita no Capitulo 7e Apendice B. o Urnmetoda parasecomunicar dadosentrefuncoesefazercomqueafuncao modo de executar este programa depende do sistema que voce esta dechamada fomeca uma Iistadevalores, chamados argumentos, afuncao queela usando. Como urnexemplo especifico, no sistema operacional UNIX voce deve criar 0 programa-fonte num arquivo cujo nome termine com" .c", tal como chama. Os parenteses apos 0 nome da funcao delirnitam a Iistade argurnentos. primeiro.c eentao compila-lo com 0comando Neste exemplo, mainedefinida como uma funcaoque naoespera argumentos, 0 que e indicado pela listavazia ( ). ccprimeiro.c Oscomandos de uma funcao saodelimitados porchaves{}.Afuncao main se voce nao errar nada, talcomo omitir urn caractere ou escrever algo errado, a contem apenas urncomando. compilacao transcorrera silenciosamente, eproduzira urnarquivo executavel cha printf ("primeiro proqrarnasn"): made a.out. Executando-o com 0comando Umafuncao echamada indicando-se seunome, seguidoporumalistadeargumen a.out tosentreparenteses, demodoqueessecomando chama afuncao printfcom0argu produzira como saida: mento "prirneiro programa\n". printf euma funcao debiblioteca que imprime uma saida, neste caso, acadeia de caracteres entre aspas. primeiroprograms Umasequencia dequalquer nurnero decaracteres entreaspas, como "primei Em outros sistemas, asregras saodiferentes; verifique com urn especialista. roprograma\n", echamada cadeia decaracteres ouconstante do tipocadeia. Por Agora, algumas explicacoes sobre 0programa. Urnprograma em C, inde ora, nosso unico uso de cadeias de caracteres sera como argumento para printf e func;ao pendentemente deseutamanho, consisteemfuTlfoes evariaveis. Uma con outras funcoes. terocomandos queespecificam asoperacoesdecoI11pUtal;iioaseremfeitas,easvaria Asequencia \nnacadeia eanotacao Cpara 0caractere denova-linha, que, veisarmazenam valores usados durante acomputacao. Fun~ C sao similares a quando impresso, provoca 0avancodocursordoterminalpara0iniciodaproxima as funcoes e sub-rotinas de urn programa Fortran, ou procedures do Pascal. No linha. Sevoceomitir0\n(valeapena tentar), voceencontrara suasaidanaotermi nossoexemplo, maineumafuncao. Normalmente, vocepodeescolher 0nomeque nada por uma alimentacao de linha. A unica maneira de seobter urncaractere de gostar, mas "main" eurnnomeespecial-s- seuprograma comeca aserexecutado nova-linha no argumento de printf ecom 0usc de\n; sevoce tentar algo como no inicio de main. Isso signifiea que todo programa deve terum mainem algum printf ("primeiro programa lugar. "); ocompilador C irnprimira urndiagnostico nao amigavel sobre afaltade aspas. #include <stdio.h> inclui info177Ulfiiosobre biblio printf nunca fomece uma nova-linha automaticamente, deforma que multi teca de comandos plas ativacoes podem ser usadas para construir uma'linha de saida, passo a pas main() define uma funciio chamada so, Nosso primeiro programapoderia tersido escrito como main que niio recebe argu mentos #include <stdio.h> comandos de main siio delimi main() tadospor chaves printf("primeiro programa\n");/ mainchama afunciiode biblio { printf ("primeiro "l: teca printf para imprimir esta printf ("programa"_; sequencia de caracteres; \n re printf ("\n"); presenta 0 caractere de nova } linha para produzir uma saida identica, Observe que \nrepresenta somente urn unico caractere. Uma sequencia de oprimeiro progr:una em C es apetalcomo\nprove urnmecanismo geralcextensfvel paraarepresentacao de c re difrcci deobterouinvisfveis. Entreos utrosque p v .tilo\lpara 7 \ tabulacao, \b para retrocesso, \" para a aspa, e\\ para a contrabarra propriarnente fahr = inicio; dita. Ha uma lista completa na Secao 2.3. while (fahr<= fim) celsius = 5*(fahr - 32)I9; Exercicio 1.1. Execute esteprograma noseusistema. Experimente deixardefora printf ("%d\t%d\n", fahr,celsius); partes do programa para ver que mensagem de erro voce obtem. 0 fahr = fahr +incr; } Exercicio1.2. Verifique0queacontecequando acadeia argumentodeprintf con As duas linhas e tern\c, onde c algum caractere nao listado acima. 0 1*imprime atabeladeconversao Fahrenheit-Celsius parafahr = 0,20,..,.300*1 1.2 Variaveis eExpress6es Aritmeticas opr6ximo programa imprime a seguinte tabela de grausFahrenheit e seus sao urn comentdrioque neste caso explica brevemente 0que 0programa faz. Quaisquer caracteres entre/* e */sao ignorados pelo compilador; eles podem ser correspondentes graus centigrados ouCelsius, usando af6rmula °C = (5/9)COF - 32). usadoslivrementeparatomar 0programa maisfacildeserentendido. Comentarios podemapareceremqualquerlugarondepossaaparecerurnespaco embranco, uma 0 - 17 marca de tabulacao ouuma nova linha. 20 -6 Em C, todas as variaveis devem ser declaradas antes de usadas, normal 40 4 iI.'! mente, noiniciodafuncao, antesdequalquer comando executavel. Umadeclara 60 15 faaanuncia aspropriedades dasvariaveis; elaconsiste deurnnomede tipoeuma 80 26 listade variaveis, como 100 37 120 48 intfahr,celsius; 140 60 int inicio, fim, incr; 160 71 o tipointimplicaqueasvariaveislistadassaointeiras;float definepontojlutuante, 180 82 e, isto mimerosquepodem terumapartefracionaria. Afaixadeintefloat depende 200 93 damaquina quevoceestausando; intsde 16bits,queseencontram nafaixaentre - 220 104 32768 e + 32767, sao comuns, assim como ints de 32 bits. Urn mimero float e 240 115 normalmente umaquantidade de32bits,compelomenos seisdigitossignificativos 260 126 emagnitude geralmente entre 10-38 e 10+38. 280 137 Cprove varios outros tipos de dados basicos alem de int e float, inchiindo: 300 148 char caractere - urnunico byte oprograma em'si aindaconsiste nadefinicao deumaunica funcao chamada main. short inteiro curto Elaemaiordo queaquelaqueimprirniu"primeiro programa", masnaocomplicada. long inteiro longo Elaintroduz diversasnovas ideias, incluindo comentarios, declaracoes, variaveis, double ponto flutuante em dupla precisao express6es aritmeticas, laces e saida formatada. Ostamanhos desses objetos sao tambern dependentes da maquina; detalhes estao #include <stdio.h> noCapitulo 2. Hatambem vetores, estruturas eunioes dessestiposbasicos, apon tadores paraeles, efuncoes queosretomam; todosseraovistosaolongodoIivro. o calculo atual no programade conversao de.temperatura comeca com as 1*imprime atabela deconversao Fahrenheit-Celsius parafahr = 0,20,..,.300*1 atribuicoes main () inicio = 0; { fim = 300; intfahr, celsius; incr = 20; intinicio,fim, incr; fahr = inicio; inicio = 0; /*limite inferior databela *1 queatribuem a:;variaveis seusvaloresiniciais. Comandos individuaissaoterrnina-_ fim = 300; 1*limite superior *1. dospor ponto-e-vfrgula. incr= 20; 1*incremento *1 I) e Cada linha da tabela computada damesma forma, eusamos, portanto, urn A proposito, printf nao faz parte da linguagem C; nao ha entrada ou safda laco que serepete uma vez por linha; essa eafmalidade dolaco while. definida na linguagem. printf eapenas uma funcao titilque fazparte da biblioteca while (fahr<= tim) { padriiodefuncoes nonnalmente acessiveis aosprogramas emC.Noentanto 0com e portamento de printf defmido nopadriio ANSI, de modo que suas propriedades devem seridenticas comqualquer compilador ebiblioteca queestejadeacordo com } opadriio. olacowhileoperadaseguinte forma: acondicao entreparenteses etestada. Seelae Para nos concentrannos somente na linguagem C, nao vamos falar muito e verdadeeira (fahr menor ouigual afime), 0corpo dolaco (todososcomandeos entre sobre entrada e safda are0Capitule-7. Em particular, vamos deixar 0assunto de .{e}) executado. Entiioacondicao retestada, eseverdadeira, 0corpo execu entrada formatada arelaoSevoce ternde lermimeros, leia sobre afuncao scanfna tadonovamente. Quando 0testesetomar falso(fahrexceder fim)0lacoterminara, S~ 7.4. scanfemuitoparecida com printf, exceto queelaIeaentrada aoinvesde e a execucao continuara no comando que segue 0laco. Nao ha mais comandos imprimir na safda. neste programa, eele termina. Haaltuns problemas com 0programa deconversao detemperatura. 0 mais ocorpodeurnwhile pode terurnoumais comandos entrechaves, como no simples eque a safda nao emuito bonita, pois os mimeros nao saojustificados a conversor de temperatura, ou urn unico comando sem chaves como em direita. Isso efacilde serconsertado; seincluirmos em cada %ddocomando printf while(i<j) umalargura, osnumeros impressos seraojustificados adireitadentro dosseuscam i=2*i; pos. Por exemplo, poderiamos escrever • Emambos oscasos, oscomandos controlados pelowhile estaoenderitados poruma printf ("%3d%6d\n", fahr,celsius); posicao detabulacao que mostramos como quatro espacos) deforma que vocepos paraimprimir 0primeiro namero de cada linha em urn campo de tres dfgitos de sa ver rapidamente que comandos estiiodentro do laco, Aendentacao enfatiza a largura, e0segundo em urn campo de seis dfgitos, assim: estrutura logica do programa. Embora C seja muito liberal quanto ao posiciona o - 17 mento decomandos, aendentacao correta e0usn deespacos saocriticos nacons trucao deprogramas faceisde serem entendidos pelas pessoas. Recomendamos es 20 - 6 crever somente urncomando por linha, e(normalmente) deixar espacos em volta 40 4 dos operadores. A posicao daschaves emenos importante; escothemos urn entre 60 15 varies estilos populares. Escolha urn estilo que the agrade, e use-o sempre. 80 26 e e 100 37 A maior partedo trabalho feitanocorpo dolaco. Atemperatura Celsius computada eatribuida acelsius pelo comando o problema mais serio vern do fato de, por termos usado aaritmetica para celsius= 5*(fahr - 32)/9; inteiros, astemperaturas emCelsius naosaomuitoprecisas; porexemplo, 0grausF A raziio para multiplicarmos por cinco e depois dividirmos por nove ao inves da corresponde acerca de - 17.8graus Celsius, enao - 17.Paraobtermos respostas construcao maissimples 5/9eque, emC, como namaioria dasoutraslinguagens, a maisprecisas, temos que usar aaritmetica deponto flutuante nolugardos inteiros. divisiio inteira trunca 0resultado, de forma que qualquer parte fracionaria e per Isto requer algumas mudancas no programa. Aqui esta uma segunda versao. dida. Como 5e:9sao inteiros, 5/9 seriatruncado para zero, eassim todas astern peraturas em Celsius seriam relatadas como zero. #include <stdio.h> Esse exemplo tambem mostra urn pouco mais sobre a operacao de printf. printf e,narealidade, uma funcao geraldeconversao defonnatos, que descrevere /*imprime atabela deconversao Fahrenheit-Celsius mos por completo no Capitulo 7. Seuprimeiro argumento ISuma cadeia de carac parafahr = 0,2'(),...,300;versao com ponto flutuante */ main() teresaserimpressa, ondecada sinal%indicaonde urndosoutros(segundo, tercei ro) argumentos deve sersubstitufdo, esob que formato sera impresso. Por exem { plo, %despecifica urn argumento inteiro, de modo que 0comando float fahr,celsius; int inicio, fim, incr; printf ("%d\t%d\n", fahr, celsius); fazcom que valores dos dois inteiros fahr ecelsius sejam impressos, com uma ta inicio = 0; /* limite inferior databela */ bulacao (\t)entre eles. tim = 300; /*limite superior */ Cada construcao do tipo %no primeiro argumento de printf casa-se com 0 incr = 20; /*incremento */ segundo argumento, terceiro argumento, etc.; eles devem, correspondentemente, alinhar-se corretamente por nnmero e tipo, caso contrario voce obtera respo tas fahr - Inlclo; sem significado. • while (fehr<-tim) 10 II

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.