Del 4 Noen spesielle C-elementer

Like dokumenter
Del 1 En oversikt over C-programmering

Kapittel 1 En oversikt over C-språket

Dagens tema INF2270. Cs preprosessor. Separat kompilering av C funksjoner. C og minnet. Dag Langmyhr,Ifi,UiO: Forelesning 5. februar 2007 Ark 1 av 15

IN 147 Program og maskinvare

Cs preprosessor. Dagens tema. Betinget kompilering

Programmeringsspråket C Del 3. Hans Petter Taugbøl Kragset

Repetisjon fra sist - 1: Plan for dagen. Repetisjon fra sist 2: Hva jeg glemte sist: Nyttige Kommandoer

Programmeringsspråket C Del 2

Dagens tema. Cs preprosessor Separat kompilering av C-funksjoner C og minnet Oversikt over operatorene

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

Dagens tema. Cs preprosessor Separat kompilering av C-funksjoner C og minnet Oversikt over operatorene

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Del 3. Pekere RR 2016

IN 147 Program og maskinvare. Dagens tema

Dagens tema. Kort repetisjon om rutiner. Programmering i C Variable og adresser. Vektorer. Tekster. Preprosessoren. Separat kompilering

IN 147 Program og maskinvare

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

Del 2 Tabeller, arrays, strenger

Dagens tema INF1070. Info om C. Cs preprosessor. Feilsøking. Dag Langmyhr,Ifi,UiO: Forelesning 31. januar 2005 Ark 1 av 29

Informasjon om C. Dagens tema INF1070 INF1070 INF1070 INF1070. Den viktigste kilden til informasjon om C (utenom en god. C-funksjonene.

Vektorer. Dagens tema. Deklarasjon. Bruk

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Programmeringsspråket C Del 3

Dagens tema INF1070. Vektorer (array er) Tekster (string er) Adresser og pekere. Dynamisk allokering

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

Debugging. Tore Berg Hansen, TISIP

Dagens tema INF1070. Signaturer. Typekonvertering. Pekere og vektorer. struct-er. Definisjon av nye typenavn. Lister

IN 147 Program og maskinvare

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Programmeringsspråket C

Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin.

INF 1000 høsten 2011 Uke september

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Dagens tema: Datastrukturer

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

Dagens tema. Adresser som parametre Dynamisk allokering Signaturer Definisjon av nye typenavn Typekonvertering Pekere og vektorer

Dagens tema. Rutiner i LC-2 Og her er tilsvarende kode for LC-2: Funksjoner i C Her er det samme programmet i C: Kort repetisjon om rutiner

Programmeringsspråket C Del 3. Michael Welzl

Kodegenerering del 3: Tilleggsnotat fra AHU Samt litt om class-filer og byte-kode INF5110 V2007. Stein Krogdahl, Ifi UiO

Objekter og referanser

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Litt om Javas class-filer og byte-kode

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Programmeringsspråket C Del 2. Michael Welzl

Hvordan en prosessor arbeider, del 1

Signaturer. Dagens tema. En vanlig feil int-funksjon. Dette kan noen ganger gi rare feilmeldinger: INF1070 INF1070 INF1070 INF1070

En oppsummering (og litt som står igjen)

Dagens tema: Enda mer MIPS maskinkode

GJØVIK INGENIØRHØGSKOLE

Pekere og vektorer. Dagens tema. I C gjelder en litt uventet konvensjon:

Dagens tema. Det siste om C Pekere og vektorer. Pekere til pekere. Vanlige pekerfeil. struct-er og typedef. Lister. Feilsøking

INF5110. Oblig 2 presentasjon

EKSAMENSOPPGAVE. INF-1100 Innføring i programmering og datamaskiners virkemåte. Ingen. Elektronisk (WiseFlow) Robert Pettersen

ITGK - H2010, Matlab. Repetisjon

IN 147 Program og maskinvare

2. Pekere og referanser.

Dagens tema INF1070. Vektorer (array-er) Tekster (string-er) Adresser og pekere. Dynamisk allokering

TDT4110 Informasjonsteknologi grunnkurs: Uke 43: Datastrukturer (kap. 8)

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Dagens tema. Mer om C Enkle datatyper Sammensatte datatyper: Vektorer og matriser Tekster Mengder Strukturer Unioner Ringbuffere

Pekere og referanser.

TDT4110 IT Grunnkurs Høst 2015

Obligatorisk Innlevering 2

IN 147 Program og maskinvare

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

TDT4105 Informasjonsteknologi grunnkurs: Uke 43: Datastrukturer (kap. 8)

Programmeringsspråket C Del 2. Hans Petter Taugbøl Kragset

Grunnleggende programmering i C

Læringsmål og pensum. Oversikt

Den siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Oppbygningen av en datamaskin Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl

IN 147 Program og maskinvare

INF Oblig 2 semantikksjekk og kodegenerering

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

Rekker (eng: series, summations)

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse

INF1000 : Forelesning 4

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

Datatyper og typesjekking

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

Transkript:

Del 4 Noen spesielle C-elementer 1 RR 2016

Header-filer inneholder Prototypene til funksjonene i standard biblioteket Verdier og definisjoner som disse funksjonene bruker #include <stdio.h> #include <string.h> sørger for kompilatoren tar med prototypene til biblioteksfunksjonene. 2

const spesifikasjonen. En variabel som vi deklarerer som const kan ikke endre sin verdi. Benyttes for å lage konstanter. Ex: const float pi = 3.1415; pi = 3.15; // Ikke lov å endre verdien på en konstant. 3

Preprosessor direktiver. I C kan vi benytte noen preprosessor direktiver som blir utført før selve programmet blir kompilert. Vi har tidligere benyttet; #include (For å inkludere filer før kompilering). Et annet direktiv er #define. #define benyttes for å angi at en tekst skal byttes ut gjennom hele programmet. #define ANTALL 100 #define PI 3.1415 4

volatile Benyttes for å fortelle at en variabel kan bli forandret av faktorer på utsiden av programmet (f.eks av operativsystemet, interrtupt, timere). Kompilatoren vil da ta hensyn til dette for angitt variabel, og unngår dermed å optimalisere koden til denne variabelen. Benyttes i interrupt og timer rutiner. Ex; volatile int clock; /* clock kan bli oppdatert av op.sys etc */ 5

static Lokale variabler blir slettet når en funksjon avsluttes. I en del sammenhenger ønsker vi at de lokale variablene skal være faste, slik at verdien til variablene huskes gjennom hele programmet. Vi kan benytte globale variabler for å oppnå en slik effekt, men globale variabler kan også gi dårlig sikkerhet. I C kan vi lage faste lokale variabler. Benytter da static spesifikatoren. void inkrement() { int tall1=1; static int tall2=1; // lokal variabel // lokal variabel med fast plass i minnet. 6

Register spesifikatoren Hvis vi spesifiserer at en variabel skal være register betyr det at datamaskinen skal lagre variabelen på en slik måte at den raskest mulig kan benyttes, dvs i CPU ens registre og ikke i RAM. Variabler som benyttes ofte, slik som løkketellere vil kunne gi tidsbesparelser hvis de legges som register variabler. Eksempel; register int teller1, teller2; 7

Kortform tilordnings operatorer. Kan benytte følgende operatorer ved tilordning; = += -= *= /= %= a += b; a -= b; a *= b; a /= b; a %= b; a = a+b; a = a-b; a = a*b; a = a/b; a = a%b; 8

Multiple tilordninger. I C er det enkelt å tilordne den samme verdien til mange variabler; teller = inkr = indeks = 10; Først tilordnes indeks til 10, deretter tilordnes inkr til indeks (10), og til slutt settes teller lik inkr (10). 9

Bit operatorene. I C finnes det 6 operatorer for bitmanipulering. Med disse operatorene kan vi jobbe mot de enkelte bit som en heltallsverdi består av. I C finnes følgende bit-operatorer; & x&y bitvis og x y bitvis eller ^ x^y bitvis eksklusiv eller x enerkompliment << x<<y x skiftet y bits til venstre >> x>>y x skiftet y bits til høyere 10

Eksempel med & operatoren. Bitvis og operator. & Operander 9430 5722 Binær representasjon 00100100 11010110 00010110 01011010 9430 & 5722 00000100 01010010 11

? : operatoren. Operatoren? : erstatter en if else setning. Generell form;. (betingelse)? uttrykk1 : uttrykk 2; Hvis betingelsen er sann er resultatet uttrykk1 ellers uttrykk2. (x < 0)? a= 20 : a = 100; res = (i > 0 )? 5 : 0; 12

Break, continue og goto break kan benyttes i løkker. Medfører umiddelbar uthopp av løkka til setningen som følger deretter. continue tvinger en løkke til å starte på toppen igjen, slik at etterfølgende setninger blir hoppet over. goto ubetinget hopp til en valgt plass i kode (label). Lite benyttet. 13

extern og auto extern benyttes for å fortelle at en global variabel allerede er definert et annet sted i programmet. Benyttes når globale verdier skal benyttes av flere C-filer. auto benyttes for å fortelle at en variabel skal oppføre seg som en lokal variabel. Ettersom dette er standard så er auto unødvendig. 14

typedef I C kan vi definere egne navn på eksisterende datatyper. typedef benyttes til dette. (Lite benyttet). typedef float desimaltall; typedef int my_int; desimaltall lengde; my_int teller; 15

enum enum benyttes for å lage en liste av symbolske heltallskonstanter. enum ukedag{ma, TI, ON, TO, FR, LO, SO}; ukedag er nå navnet på den nye datatypen. De symbolske oppramsingene inne i parentesen får fortløpende verdi fra 0 og oppover. Det vil si at MA == 0, TI == 1, ON == 2, osv Vi kan nå lage en variabel av type dager; enum ukedag dag; dag = MA; // dag får verdien 0 dag = FR; // dag får verdien 4. 16

sizeof operatoren. Gir oss antall bytes en datatype består av. Er nyttig når vi skal avsette plass i minne og på filer. int main(void) { char ch; int i; int tab[4]; printf( %d\n, sizeof ch); printf( %d\n, sizeof i); printf( %d\n, sizeof (float)); printf( %d\n, sizeof (double)); printf( %d\n, sizeof tab); return 0; } 17

cast operatoren Lar oss midlertidig omgjøre en datatype til en annen. Nyttig når en har behov for å gjøre float om til int, int til float osv. (type) verdi; Ex: float f=12.34;... printf( %d\n, (int) f);... 18

Strukturer 1. En struktur er en datatype vi selv kan lage for å holde data/informasjon, som er knyttet til hverandre på en oversiktlig (strukturert) måte. Vi kan opprette egne datatyper etter behov, og benytte et navn for å få tilgang til en samling av data. struct person { }; char navn[41]; int alder; char telefon[15]; struct person stud1, stud2, stud3; struct person studdata[100]; stud1.alder = 22; 19

Strukturer 2. struct person{ char navn[41]; int alder; char telefon[15]; } stud1, *studpkr; studpkr = &stud1; studpkr->alder = 23; NB!! Bruk dot-operatoren får å få tilgang til et strukturmedlem. Bruk pil-operatoren for å få tilgang til et strukturmedlem når det benyttes pekere. 20

Reservering av dynamisk minne (1). Vanlig variabler blir enten lagt statisk i minne (globale variabler) eller på en stakk (lokale variabler). Noen ganger vil det ofte være behov for å legge data midlertidig i minne. Det kan være vanlige variabler, tabeller og strukturer (objekter). Mye benyttet når vi lager datastrukturer som lenkede lister, binære trær etc der vi ikke vet antall elementer på forhånd, og avsetter plass etter behov. Vi kan reservere minne (et antall bytes) når vi trenger det med funksjonen; void *malloc( size_t num_bytes); Funksjonen returnerer en peker til starten av minneblokken vi har reservert. 21

Reservering av dynamisk minne (2). Minnet frigjøres med; void free( void *ptr); ptr er en peker til starten av reservert minne. int main(void) { int i; double *pkr;... pkr = malloc(100*sizeof(double)); // 400 bytes... // Kan nå benytte reservert minne... free(pkr);... 22

Betingelse-styrt kompilering (1) Med preprosessor kommandoer kan vi styre hvordan C koden vår skal kompileres. Vi kan angi at kun visse deler skal tas med, og vi kan sjekke om include filer allerede er inkludert. Følgende direktiver kan benyttes. #if #else #elif #endif #ifdef #ifndef 23

Betingelse-styrt kompilering (2) #include <stdio.h> #define DEBUG #define TEST 3 int main(void) { #ifdef DEBUG printf("debug er definert!!! \n");... #else printf("debug er ikke definert!!! \n");... #endif... #undef DEBUG... 24