ebook img

Programmeringsspråket C PDF

330 Pages·1989·115.163 MB·Norwegian
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 Programmeringsspråket C

PROGRAMMERINGSSPRÅKET PROGRAMMERINGSSPRÅKET c Brian W. Kernighan * Dennis M. Ritchie AT&T Bell Laboratories Murray Hill, New Jersey, USA Oversatt av Rolf Behn Gulliksen TANO PRENTICE HALL NasjonalbiblioteKei Depotbiblioteket NOXl ØNDCLAG DWTR Originalens tittel: The C programming language Copyright © 1988, 1978 by Bell Telephone Laboratories, Incorporated. Norsk utgave: © TANO A.S. og Prentice Hall 1989 Sats: Os fotosats a.s, Oslo Trykk: Prentice Hall Printed in Great Britain ISBN 82-518-0000-0 OøSJVSc k cx 5 Innhold Forord 9 Forord til første utgave 11 Innledning 13 Kapittel 1. En elementær innføring 17 1.1 Vi starter 17 1.2 Variabler og aritmetiske uttrykk 20 1.3 For-setningen 26 1.4 Symbolske konstanter 27 1.5 Innlesning og utskrift av tegn 28 1.6 Tabeller 35 1.7 Funksjoner 37 1.8 Argumenter 41 1.9 Tegntabeller 42 1.10 Eksterne variabler og definisjonsområde 45 Kapittel 2. Typer, operatorer og uttrykk 49 2.1 Variabelnavn 49 2.2 Datatyper og størrelser 50 2.3 Konstanter 51 2.4 Deklarasjoner 54 2.5 Aritmetiske operatorer 55 2.6 Relasjonsoperatorer og logiske operatorer 56 2.7 Typekonverteringer 57 2.8 Inkrement- og dekrementoperatorer 62 2.9 Bitoperatorer 64 2.10 Tilordningsoperatorer og uttrykk 65 2.11 Betingelsesuttrykk 67 2.12 Prioritet og beregningsrekkefølge 68 Kapittel 3. Kontrollflyt 71 3.1 Setninger og blokker 71 6 3.2 If-Else 71 3.3 Else-If 73 3.4 Switch 74 3.5 Løkker — While og For 76 3.6 Løkker — Do-while 79 3.7 Break og Continue 81 3.8 Goto og etiketter 82 Kapittel 4. Funksjoner og programstruktur 85 4.1 Elementært om funksjoner 85 4.2 Funksjoner som returnerer ikke-heltall 89 4.3 Eksterne variabler 92 4.4 Regler for definisjonsområde 98 4.5 Deklarasjonsfiler 100 4.6 Statiske variabler 102 4.7 Registervariabler 102 4.8 Blokkstruktur 103 4.9 Initialisering 104 4.10 Rekursjon 106 4.11 C forprosessor 108 Kapittel 5. Pekere og tabeller 113 5.1 Pekere og adresser 113 5.2 Pekere og funksjonsargumenter 115 5.3 Pekere og tabeller 118 5.4 Adresseberegninger 121 5.5 Tegnpekere og funksjoner 125 5.6 Pekertabeller; pekere til pekere 128 5.7 Flerdimensjonale tabeller 132 5.8 Initialisering av pekertabeller 134 5.9 Pekertabeller kontra flerdimensjonale tabeller 135 5.10 Kommandolinjeargumenter 136 5.11 Pekere til funksjoner 140 5.12 Kompliserte deklarasjoner 144 Kapittel 6. Strukturer 149 6.1 Elementært om strukturer 149 6.2 Strukturer og funksjoner 152 6.3 Tabeller av strukturer 155 6.4 Pekere til strukturer 159 6.5 Selvrefererende strukturer 161 6.6 Tabelloppslag 166 6.7 Typedef 168 6.8 Unioner 170 6.9 Bitfelter 172 7 Kapittel 7. Innlesning og utskrift 175 7.1 Standard innlesning og utskrift 175 7.2 Formatert utskrift — Printf 177 7.3 Argumentlister av varierende lengde 180 7.4 Formatert innlesning — Scanf 181 7.5 Filaksess 185 7.6 Behandling av feil — Stderr og Exit 188 7.7 Innlesning og utskrift av linjer 190 7.8 Diverse funksjoner 191 Kapittel 8. Systemets grensesnitt mot UNIX 195 8.1 Filbeskrivelse 195 8.2 Lavnivå I/O — Read og Write 196 8.3 Open, Creat, Close, Unlink 198 8.4 Direkte aksess — Lseek 201 8.5 Eksempel — en implementering av Fopen og Getc 202 8.6 Eksempel — listing av filkataloger 205 8.7 Eksempel — lageradministrator 211 Tillegg A. Referansedel 217 Al Innledning 217 A2 Leksikalske konvensjoner 217 A3 Syntaksnotasjon 221 A4 Bruk av navn 222 A5 Objekter og Ivalues 224 A6 Konverteringer 224 A7 Uttrykk 228 A8 Deklarasjoner 241 A9 Utsagn 255 A10 Eksterne deklarasjoner 259 All Definisjonsområde og linking 262 Al2 Forprosessering 264 Al3 Grammatikk 271 Tillegg B. Standardbibliotek 279 Bl Innlesning og utskrift: <stdio.h> 279 B2 Tegnklasser: <ctype.h> 289 B3 Strengfunksjoner: <string.h> 290 B4 Matematiske funksjoner: <math.h> 292 B5 Hjelpefunksjoner: <stdlib.h> 293 B6 Diagnostikk: <assert.h> 296 B7 Argumentlister med variabel lengde: <stdarg.h> 296 B8 Ikke-lokale hopp: <setjmp.h> 297 B9 Signaler: < signal.h> 297 B10 Dato- og klokkeslettfunksjoner: <time.h> 298 Bil Implementasjonsdefinerte grenser: <limits.h> og < float.h> 300 Tillegg C. Oppsummering av endringer 303 Stikkord 307 9 Forord Den delen av verden som har med datamaskiner og datamaskinbruk å gjøre har gjennomgått en revolusjon siden den første utgaven av The C Programming Language utkom i 1978. Stordatamaskiner er mye større nå, og mikrodatamaskiner byr på muligheter som er på høyde med hva mange stordatamaskiner kunne by på for ti års tid siden. I løpet av disse årene har også C gjennomgått visse endringer, selv om de er beskjedne, og språket har vunnet utbredelse langt utenfor sitt opprinnelige område, som det språ­ ket operativsystemet UNIX er skrevet i. Både det at C stadig er blitt mer populært, de endringene i språket som er foretatt i årenes løp og det at grupper som ikke er involvert i formgivnin- gen av språket har utarbeidet kompilatorer viste at det var behov for en mer presis og ajourført definisjon av språket enn den første utgaven av boken ga. I 1983 opprettet The American National Standards Institute (ANSI) en komité som fikk i mandat å utarbeide «en utvetydig og maskinuavhengig definisjon av språket C», samtidig som komiteen skulle bevare språkets ånd. Resultatet er ANSI-standarden for C. Denne standarden formaliserer konstruksjoner som ble antydet, men ikke beskrevet i den første utgaven, særlig strukturtilordning og oppram- singsvariabler. Den angir en ny form for funksjonsdeklarasjoner som tilla­ ter krysskontroll av definisjon med bruk. Standarden angir også et stan- dardbibliotek med et utfyllende sett av funksjoner til å lese inn og hente ut data, administrere primærlageret, manipulere strenger og utføre tilsva­ rende oppgaver. Den presiserer hvordan finesser som ble antydet, men ikke uttrykt i klartekst i den opprinnelige definisjonen skal oppføre seg, og sam­ tidig slår den entydig fast hvilke sider av språket som fremdeles skal være maskinavhengige. Denne nye utgaven av The CProgramming Language beskriver C slik det er definert i den nye ANSI-standarden. (Mens dette ble skrevet, hadde man nesten fått innhentet alle høringsuttalelsene angående denne standarden, og man venter at den vil bli vedtatt henimot utgangen av 1988. Forskjellene mellom det som er beskrevet her og standardens endelige form vil trolig være minimale). Selv om vi har angitt de stedene der språket har gjennom­ gått en utvikling, har vi valgt å skrive utelukkende i den nye formen. Stort sett medfører ikke dette problemer av noen art. Den mest synlige forand- 10 ringen i C er den nye måten funksjoner deklareres og defineres på. Moderne kompilatorer kan allerede arbeide med de fleste finessene i den nye standarden. Vi har forsøkt å bevare det ordknappe preget i den første utgaven av boken. C er ikke noe stort og omfattende språk, og det er ikke egnet for beskrivelse i en omfangsrik bok. Vi har forbedret fremstillingen av kritiske finesser, for eksempel pekere, som står sentralt i C-programmering. Vi har forbedret de opprinnelige eksemplene og kommet med nye eksempler i flere av kapitlene. For eksempel er behandlingen av kompliserte deklarasjoner supplert med programmer som konverterer deklarasjoner til ord og omvendt. Som tidligere er alle eksemplene blitt utprøvet direkte fra teksten, som er i maskinlesbar form. Tillegg A, referansedelen, er ikke identisk med standarden. Den er vårt forsøk på å formidle det essensielle i standarden på noe mindre plass. Refe­ ransedelen er ment å gjøre C lettere å forstå for programmerere. Den er ikke ment å være noen definisjon for mennesker som skriver kompilatorer — den rollen tilhører rettelig standarden selv. Tillegg B er en oppsummering av hjelpemidlene i standardbiblioteket. Oppsummeringen er også ment å være en referanse for programmerere, og er ikke presis nok for dem som lager kompilatorer. Tillegg C er en konsis oppsummering av endringene fra den opprinnelige utgaven. Som vi skrev i forordet til første utgave av boken, er C et språk som«hol- der seg godt etter hvert som man får større erfaring med det.» Etter et tiår med mer erfaring føler vi det fremdeles på samme måte. Vi håper boken vil hjelpe deg til å lære C og til å bruke det på en god måte. Vi står i dyp takknemlighetsgjeld til venner som har hjulpet oss å utar­ beide boken. John Bentley, Doug Gwyn, Doug Mcllroy, Peter Nelson og Rob Pike har kommet med verdifulle kommentarer til nesten hver eneste side av de forskjellige utkastene til endelig manuskript. Vi er takknemlige for at Al Aho, Dennis Allison, Joe Campbell, G.R. Emlin, Karen Fortgang, Alan Holub, Andrew Hume, Dave Kristol, John Linderman, Dave Prosser, Gene Spafford og Chris Van Wyk har nøye gjennomlest manuskriptet. Vi har også fått nyttige tips og forslag fra Bill Cheswick, Mark Kernighan, Andy Koenig, Robin Lake, Tom London, Jim Reeds, Clovis Tondo og Peter Weinberger. Dave Prosser har gitt oss svar på mange detaljerte spørsmål om ANSI-standarden. Vi har gjort utstrakt bruk av Bjarne Stroustrups C + + oversetterprogram til lokal utprøving av programmene våre, og Dave Kristol skaffet oss en ANSI C kompilator til endelig utprøving. Rich Drechsler har gitt oss stor og verdifull hjelp med settingen av boken. Vi ønsker å gi dem vår oppriktige takk. Brian W. Kernighan Dennis M. Ritchie

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.