55
Introduk)on C-programmering Ulf Assarsson Originalslides av Viktor Kämpe

Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Introduk)onC-programmering

UlfAssarsson

OriginalslidesavViktorKämpe

Page 2: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

2

Page 3: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Bakgrund•  ShortCode,1949,1:sthighlevellanguage•  Autocode,early50’ies.•  Fortran,IBM,~57.•  Lisp,58.•  Cobol60(CommonBusiness-orientedlanguage.•  BASIC,1964.•  ALGOL60(ALGOrithmicLanguage1960).•  Simula,60:ies.•  C,~1969.•  Prolog,1972.•  Ada,~1975•  Pascal,~1975.•  ML,1978.

Introduk)onC-programmering 3

Page 4: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Bakgrund•  ShortCode,1949,1:sthighlevellanguage•  Autocode,early50’ies.•  Fortran,IBM,~57.•  Lisp,58•  Cobol60(CommonBusiness-orientedlanguage.•  BASIC,1964.•  ALGOL60(ALGOrithmicLanguage1960).•  Simula,60:ies.•  C,~1969.•  Prolog,1972.•  Ada,~1975•  Pascal,~1975.•  ML,1978.

Introduk)onC-programmering 4

KompileradesvarjegångHadecompiler

Finnskvarpgamycketlegacycode

Page 5: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Bakgrund•  ShortCode,1949,1:sthighlevellanguage•  Autocode,early50’ies.•  Fortran,IBM,~57.•  Lisp,58•  Cobol60(CommonBusiness-orientedlanguage.•  BASIC,1964.•  ALGOL60(ALGOrithmicLanguage1960).•  Simula,60:ies.•  C,~1969.•  Prolog,1972.•  Ada,~1975•  Pascal,~1975.•  ML,1978.

Introduk)onC-programmering 5

KompileradesvarjegångHadecompiler

FinnskvarpgamycketlegacycodeFortranCAREAOFATRIANGLE-HERON'SFORMULACINPUT-CARDREADERUNIT5,INTEGERINPUTCOUTPUT-LINEPRINTERUNIT6,REALOUTPUTCINPUTERRORDISPAYERROROUTPUTCODE1INJOBCONTROLLISTINGINTEGERA,B,CREAD(5,501)A,B,C501FORMAT(3I5)IF(A.EQ.0.OR.B.EQ.0.OR.C.EQ.0)STOP1S=(A+B+C)/2.0AREA=SQRT(S*(S-A)*(S-B)*(S-C))WRITE(6,601)A,B,C,AREA601FORMAT(4HA=,I5,5HB=,I5,5HC=,I5,8HAREA=,F10.2,12HSQUAREUNITS)STOPEND

Page 6: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Bakgrund•  ShortCode,1949,1:sthighlevellanguage•  Autocode,early50’ies.•  Fortran,IBM,~57.•  Lisp,58•  Cobol60(CommonBusiness-orientedlanguage.•  BASIC,1964.•  ALGOL60(ALGOrithmicLanguage1960).•  Simula,60:ies.•  C,~1969.•  Prolog,1972.•  Ada,~1975•  Pascal,~1975.•  ML,1978.

Introduk)onC-programmering 6

KompileradesvarjegångHadecompiler

FinnskvarpgamycketlegacycodeFörmatema)k/AI.

Lisp(defunfactorial(n)(if(=n0)1(*n(factorial(-n1)))))

Page 7: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Bakgrund•  ShortCode,1949,1:sthighlevellanguage•  Autocode,early50’ies.•  Fortran,IBM,~57.•  Lisp,58•  Cobol60(CommonBusiness-orientedlanguage.•  BASIC,1964.•  ALGOL60(ALGOrithmicLanguage1960).•  Simula,60:ies.•  C,~1969.•  Prolog,1972.•  Ada,~1975•  Pascal,~1975.•  ML,1978.

Introduk)onC-programmering 7

KompileradesvarjegångHadecompiler

Finnskvarpgamycketlegacycode

Impera)vt,procedurellt,idagobjektorienterat

Förmatema)k/AI.

COBOLIDENTIFICATIONDIVISION.PROGRAM-ID.HELLO-WORLD.PROCEDUREDIVISION.DISPLAY'Hello,world'.STOPRUN.

Förbusiness+finance.“Pra)gt”.

Page 8: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Bakgrund•  ShortCode,1949,1:sthighlevellanguage•  Autocode,early50’ies.•  Fortran,IBM,~57.•  Lisp,58•  Cobol60(CommonBusiness-orientedlanguage.•  BASIC,1964.•  ALGOL60(ALGOrithmicLanguage1960).•  Simula,60:ies.•  C,~1969.•  Prolog,1972.•  Ada,~1975•  Pascal,~1975.•  ML,1978.

Introduk)onC-programmering 8

KompileradesvarjegångHadecompiler

Finnskvarpgamycketlegacycode

Impera)vt,procedurellt,idagobjektorienterat

Förmatema)k/AI.

BASIC5LETS=010MATINPUTV20LETN=NUM30IFN=0THEN9940FORI=1TON45LETS=S+V(I)50NEXTI60PRINTS/N70GOTO599END

Page 9: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Bakgrund•  ShortCode,1949,1:sthighlevellanguage•  Autocode,early50’ies.•  Fortran,IBM,~57.•  Lisp,58•  Cobol60(CommonBusiness-orientedlanguage.•  BASIC,1964.•  ALGOL60(ALGOrithmicLanguage1960).•  Simula,60:ies.•  C,~1969.•  Prolog,1972.•  Ada,~1975•  Pascal,~1975.•  ML,1978.

Introduk)onC-programmering 9

KompileradesvarjegångHadecompiler

Finnskvarpgamycketlegacycode

Impera)vt,procedurellt,idagobjektorienterat

Förmatema)k/AI.

InflueradeC

Page 10: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Bakgrund•  ShortCode,1949,1:sthighlevellanguage•  Autocode,early50’ies.•  Fortran,IBM,~57.•  Lisp,58•  Cobol60(CommonBusiness-orientedlanguage.•  BASIC,1964.•  ALGOL60(ALGOrithmicLanguage1960).•  Simula,60:ies.•  C,~1969.•  Prolog,1972.•  Ada,~1975•  Pascal,~1975.•  ML,1978.

Introduk)onC-programmering 10

KompileradesvarjegångHadecompiler

Finnskvarpgamycketlegacycode

Impera)vt,procedurellt,idagobjektorienterat

Förmatema)k/AI.

InflueradeCALGOLprocedureAbsmax(a)Size:(n,m)Result:(y)Subscripts:(i,k);valuen,m;arraya;integern,m,i,k;realy;beginintegerp,q;y:=0;i:=k:=1;forp:=1step1unNlndoforq:=1step1unNlmdoifabs(a[p,q])>ythenbeginy:=abs(a[p,q]);i:=p;k:=qendendAbsmax

Page 11: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Bakgrund•  ShortCode,1949,1:sthighlevellanguage•  Autocode,early50’ies.•  Fortran,IBM,~57.•  Lisp,58•  Cobol60(CommonBusiness-orientedlanguage.•  BASIC,1964.•  ALGOL60(ALGOrithmicLanguage1960).•  Simula,60:ies.•  C,~1969.•  Prolog,1972.•  Ada,~1975•  Pascal,~1975.•  ML,1978.

Introduk)onC-programmering 11

KompileradesvarjegångHadecompiler

Finnskvarpgamycketlegacycode

Impera)vt,procedurellt,idagobjektorienterat

Förmatema)k/AI.

!SimulaBeginOutText("HelloWorld!");OuNmage;End;

1:aobjektorienteradespråk,klasser,virtuellametoder,objekt,arv,trådar…

InflueradeC

Page 12: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Bakgrund•  ShortCode,1949,1:sthighlevellanguage•  Autocode,early50’ies.•  Fortran,IBM,~57.•  Lisp,58•  Cobol60(CommonBusiness-orientedlanguage.•  BASIC,1964.•  ALGOL60(ALGOrithmicLanguage1960).•  Simula,60:ies.•  C,~1969.•  Prolog,1972.•  Ada,~1975•  Pascal,~1975.•  ML,1978.

Introduk)onC-programmering 12

KompileradesvarjegångHadecompiler

Finnskvarpgamycketlegacycode

Impera)vt,procedurellt,idagobjektorienterat

Förmatema)k/AI.

1:aobjektorienteradespråk,klasser,virtuellametoder,objekt,arv

/*C*/intmain(){printf(“HelloWorld!\n");return0;

}

InflueradeC

Page 13: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Bakgrund•  ShortCode,1949,1:sthighlevellanguage•  Autocode,early50’ies.•  Fortran,IBM,~57.•  Lisp,58•  Cobol60(CommonBusiness-orientedlanguage.•  BASIC,1964.•  ALGOL60(ALGOrithmicLanguage1960).•  Simula,60:ies.•  C,~1969.•  Prolog,1972.•  Ada,~1975•  Pascal,~1975.•  ML,1978.

Introduk)onC-programmering 13

KompileradesvarjegångHadecompiler

Finnskvarpgamycketlegacycode

Impera)vt,procedurellt,idagobjektorienterat

Förmatema)k/AI.

1:aobjektorienteradespråk,klasser,virtuellametoder,objekt,arv

AI/lingvis)k.Facts/rules,queriesoverrela)onships

Prolog?-write('Helloworld!'),nl.Helloworld!true.?-

InflueradeC

Page 14: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Bakgrund•  ShortCode,1949,1:sthighlevellanguage•  Autocode,early50’ies.•  Fortran,IBM,~57.•  Lisp,58•  Cobol60(CommonBusiness-orientedlanguage.•  BASIC,1964.•  ALGOL60(ALGOrithmicLanguage1960).•  Simula,60:ies.•  C,~1969.•  Prolog,1972.•  Ada,~1975•  Pascal,~1975.•  ML,1978.

Introduk)onC-programmering 14

KompileradesvarjegångHadecompiler

Finnskvarpgamycketlegacycode

Impera)vt,procedurellt,idagobjektorienterat

Förmatema)k/AI.

1:aobjektorienteradespråk,klasser,virtuellametoder,objekt,arv

AI/lingvis)k.Facts/rules,queriesoverrela)onships

withAda.Text_IO;useAda.Text_IO;procedureHelloisbeginPut_Line("Hello,world!");endHello;

Impera)vt,procedurellt,idagobjektorienterat

InflueradeC

Page 15: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Bakgrund•  ShortCode,1949,1:sthighlevellanguage•  Autocode,early50’ies.•  Fortran,IBM,~57.•  Lisp,58•  Cobol60(CommonBusiness-orientedlanguage.•  BASIC,1964.•  ALGOL60(ALGOrithmicLanguage1960).•  Simula,60:ies.•  C,~1969.•  Prolog,1972.•  Ada,~1975•  Pascal,~1975.•  ML,1978.

Introduk)onC-programmering 15

KompileradesvarjegångHadecompiler

Finnskvarpgamycketlegacycode

Impera)vt,procedurellt,idagobjektorienterat

Förmatema)k/AI.

1:aobjektorienteradespråk,klasser,virtuellametoder,objekt,arv

AI/lingvis)k.Facts/rules,queriesoverrela)onshipsImpera)vt,procedurellt,idagobjektorienterat

InflueradeC

Impera)vt,procedurellt,idagobjektorienteratPascalProgramHelloWorld;BeginWriteLn('Helloworld!'){no";"isrequiredaPerthelaststatementofablock-addingoneaddsa"nullstatement"totheprogram}End.

Page 16: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Bakgrund•  ShortCode,1949,1:sthighlevellanguage•  Autocode,early50’ies.•  Fortran,IBM,~57.•  Lisp,58•  Cobol60(CommonBusiness-orientedlanguage.•  BASIC,1964.•  ALGOL60(ALGOrithmicLanguage1960).•  Simula,60:ies.•  C,~1969.•  Prolog,1972.•  Ada,~1975•  Pascal,~1975.•  ML,1978.

Introduk)onC-programmering 16

KompileradesvarjegångHadecompiler

Finnskvarpgamycketlegacycode

Impera)vt,procedurellt,idagobjektorienterat

Förmatema)k/AI.

1:aobjektorienteradespråk,klasser,virtuellametoder,objekt,arv

AI/lingvis)k.Facts/rules,queriesoverrela)onshipsImpera)vt,procedurellt,idagobjektorienterat

InflueradeC

Impera)vt,procedurellt,idagobjektorienteratFunk)onellt,rekursivt.Föregångare)llHaskell.

funfac(0:int):int=1|fac(n:int):int=n*fac(n-1)

Page 17: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

•  Maskinnäraprogrammering:–  Behöverspråkmedpekare)llabsolutaadresser

•  Basic,Ada95(ochsenareversioner),C,C++,C#(mednyckelordetunsafe),Objec)ve-C,D,COBOL,Fortran.

•  C-1969•  C++-1983•  (Ada–1995)•  C#-2000,strongtypechecking,garbagecollec)on,obj.oriented,“COOL”.

•  D-2001

Introduk)onC-programmering 17

C–Bakgrund

Page 18: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C++ •  Google •  EON •  Autodesk •  Surgical Science •  Mentice •  Vizendo •  Spark Vision •  ABB •  DICE / EA •  EA Ghost Games •  2K Sports - C •  Ericsson – C / Java •  Microsoft – wanted to promote XNA and C#

–  Advantage: works on Xbox 360 –  Xbox one: C++ / C#

•  Playstation 3 – uses OpenGL ES and C++ •  Playstation 4 – C++ (C#, C, …)

Page 19: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Historik•  B,BellLabs~1969•  C:Utveckladesförst1969–1973avDennisRitchcievidAT&TBellLabs.

•  Högnivåspråkmedkontaktmotmaskinvara.•  E~utavdemestanvändaspråken.•  C++,D.

•  Maskinnära,pekare,front/backend

Introduk)onC-programmering 19

Page 20: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Crespek)veAssembler•  VarförCiställetförassembler?

–  Färreraderkod,mindreriskförfel,snabbare…•  VarförförståhurCkompileras)llassembler?

–  prestandaop)meringochresonerakringprestanda(texfördatorgrafik,GPU:er,HPC).•  Hurmycketsnabbareärenwhile-loopänrekursion?•  Loop-unroll?

–  energikonsump)on–  säkerhet/robusthet/risker

•  Kunnadebugga–  KunnamixaC/asmviddrivru)nsprogrammeringellerprestandakri)skaförlopp.•  SIMD:Intel’sSSE

Introduk)onC-programmering 20

Page 21: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

ÖversiktC–fyralek)oner•  Lekt1:intro)llC•  Lekt2+3:pekare•  Lekt4:mixaCochassembler

Introduk)onC-programmering 21

Page 22: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C–Standarder•  1978, K&RC (Kernighan&Ritchie)•  1989, C89/C90 (ANSI-C)•  1999, C99 (Rev.ANSI-standard)•  2011, C11 (Rev.ANSI-standard)

22

Page 23: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Helloworld!–program#include<stdio.h>intmain(){printf(“HelloWorld!\n");return0;

}

23

Page 24: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

CvsJava.Någraskillnader:•  C:saknarklasser.Hardockstructsförsammansa~adatatyper.

•  Booleansärejegentyp.true/falsefinnsej.0ärfalse.E~värde!=0ärtrue.Därfördefinierarmano�aTRUE/FALSEsom1resp0.1&&1=“Implementa)onsspecifiktförkompilatorn”.

24

structCourse{char*name;floatcredits;intnumberOfParticipants;

};

Page 25: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

MerC:•  Typeconversion–  default:convertnarrowerformattothewiderformat

– Synlighet:•  globalsynlighet,•  synlighetifunk)on•  respscope.

25

#include<stdio.h>intx;intfoo(intx){

if(x==0){ intx=4; returnx;}returnx;

}intmain(){

x=1;x=foo(0);printf("xis%i",x);return0;

}

floata;a=1.0/3;//a==0.33333343

Page 26: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Integreradutvecklingsmiljö(IDE)

Bygg

Kör

TexCodeLitesomärgra)sochopen-source.(h~p://codelite.org/)

26

Page 27: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Frånterminalen> gcc –o hello.exe main.c

> hello.exe Hello World!

>

Introduk)onC-programmering

Bygg

Kör

27

Page 28: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Variabler#include<stdio.h>intx;intmain(){

chary;

x=32;y='a';

x=x+y;

printf("xharnuvärdet%iochyharvärdet%isomkodartecknet%c\n",x,(int)y,y);return0;

}

Introduk)onC-programmering

Utskri�:xharnuvärdet129ochyharvärdet97somkodarteckneta

Typ

Variabelnamn

28

Page 29: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Deklara)oneroch)lldelningar#include<stdio.h>intx;intmain(){

chary;

x=32;y='a';

x=x+y;

printf("xharnuvärdet%iochyharvärdet%isomkodartecknet%c\n",x,(int)y,y);return0;

}

Introduk)onC-programmering

Endeklareradvariabelsomännuinte)lldelatse~värdeäroiniValiserad

Deklara)oner

Tilldelningar

29

Page 30: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Typkonverteringar#include<stdio.h>intx;intmain(){

chary;

x=32;y='a';

x=x+y;

printf("xharnuvärdet%iochyharvärdet%isomkodartecknet%c\n",x,(int)y,y);return0;

}

Introduk)onC-programmering

Typkonverteringkallasocksåcast,ochmansägera~mancastar.

Implicittypkonvertering

Explicittypkonvertering

30

Page 31: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Introduk)onC-programmering 31

ASCII–FinnsdetbaraenASCII-tabell?Nej…DetfinnsfleraolikaASCIIextensions(övre128värdena),beroendepåspråk. ISO8859-1,alsocalledISOLaVn1,ISO8859-2forEasternEuropeanlanguages,andISO8859-5forCyrilliclanguages(TerminaleranvänderintenödvändigtvisASCII-tabellen.Consoledäremoto�ast.)

Page 32: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

C89–deklara)onerförst#include<stdio.h>intx;intmain(){

x=32;

chary='a';

x=x+y;

printf("xharnuvärdet%iochyharvärdet%isomkodartecknet%c\n",x,(int)y,y);return0;

}

Introduk)onC-programmering

En)lldelninginnandeklara)onernaärEJ)llåtetenligtC89

Fungerariblandändå(texiCodeLite),meninteiXCC12somviskaanvändasenare.

32

Page 33: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Funk)oner#include<stdlib.h>intfoo(intx,chary){

intsum=0;

while(y-->0){ sum+=x*y;}

returnsum;

}

Introduk)onC-programmering

Argumentenär’’pass-byvalue’’.

argument

intvar1;charvar2=7;var1=foo(5,var2);

var2harfor�arandevärdet7e�erfunk)onsanropet

Returvärdeavreturtyp

33

Page 34: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Synlighet/Visibility/Scope•  Globalsynlighet (globalscope)•  Filsynlighet (filescope)•  Lokalsynlighet (e.g.func)onscope)

Introduk)onC-programmering 34

Page 35: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Synlighet#include<stdlib.h>charx;intfoo(){

//xärsynlig//yärintesynlig

}chary;

Introduk)onC-programmering 35

Page 36: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Synlighetpåfunk)onsnivå#include<stdlib.h>charx;intfoo(floatx){

//argumentetx(float)ärsynligt}

Introduk)onC-programmering 36

Page 37: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Synlighetpåfunk)onsnivå#include<stdlib.h>charx;intfoo(){

intx=4;returnx;

}

Introduk)onC-programmering 37

Page 38: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Vilkensynlighetharhögstprioritet?#include<stdio.h>intx;intfoo(intx){

if(x==0){ intx=4; returnx;}

returnx;

}intmain(){

x=1;x=foo(0);printf("xis%i",x);return0;

}

Introduk)onC-programmering

Vadärx?

38

Page 39: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Funk)onsprototyper#include<stdio.h>//funktionsprototypintfoo(intx);intmain(){

printf("xis%i",foo(0));return0;

}intfoo(intx){

//funktionskropp}

Introduk)onC-programmering 39

Page 40: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Programstruktur//main.c#include<stdio.h>#include"foo.h"intmain(){

printf("xis%i",foo(0));return0;

}

Introduk)onC-programmering

//foo.hintfoo(intx);

//foo.c#include<stdlib.h>intfoo(intx){

if(x==0){ intx=4; returnx;}

returnx;

}

c-filInkluderarheader-fil

header-filInnehåller

funk)onsprototyper

c-fil

header-filenmåsteintehasammanamnsomc-filen,mendetärenklareså.

40

Page 41: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Frånkällkod)llexekverbar1.  Preprocessing2.  Kompilering3.  Länkning

Introduk)onC-programmering 41

Page 42: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Preprocessorn//main.c#include<stdio.h>#include"foo.h"#defineMAX_SCORE100#defineSQUARE(x)(x)*(x)intmain(){

printf("Högstamöjligapoängär%i\n",MAX_SCORE);printf("Kvadratenav3är%i\n",SQUARE(1+2));printf("xis%i",foo(0));return0;

}

Introduk)onC-programmering

Copy-pasteavfiler

Find-and-replaceavsträngar

Preprocessornarbetarpåkällkodenpå’’textnivå’’.

42

Page 43: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Kompilering•  Processarenc-filitaget•  Skaparenobjek�ilsominnehåller:– Maskinkodförinstruk)oner– Symbolerföraddresser

•  Förfunk)oner/variableriobjek�ilen.•  Förfunk)oner/variableriandraobjek�iler/bibliotek.

Introduk)onC-programmering 43

Page 44: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Länkning•  Sä~ersamman(flera)objek�iler)llenexekverbarfil(.exe).

•  Översä~ersymbolerna)ll(rela)va)adresser.

Introduk)onC-programmering 44

Page 45: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Aritme)skaoperatorerBasicassignment a=bAddi)on a+b

Subtrac)on a-bUnaryplus(integerpromo)on) +aUnaryminus(addi)veinverse) -aMul)plica)on a*b

Division a/b

Modulo(integerremainder) a%b

IncrementPrefix ++a

Pos�ix a++

DecrementPrefix --a

Pos�ix a--

Introduk)onC-programmering

h~p://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Arithme)c_operators

45

Page 46: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

JämförelseoperatorerEqualto a==b

Notequalto a!=b

Greaterthan a>b

Lessthan a<b

Greaterthanorequalto a>=b

Lessthanorequalto a<=b

Introduk)onC-programmering

h~p://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Comparison_operators.2Frela)onal_operators

46

Page 47: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

LogiskaoperatorerLogicalnega)on(NOT) !a

LogicalAND a&&b

LogicalOR a||b

Introduk)onC-programmering

h~p://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Logical_operators

47

Page 48: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Bitopera)onerBitwiseNOT ~a

BitwiseAND a&b

BitwiseOR a|b

BitwiseXOR a^bBitwisele�shi� a<<bBitwiserightshi� a>>b

Introduk)onC-programmering

h~p://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Bitwise_operators

48

Page 49: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Sammansa~a)lldelsningsoperatorerOperatorname Syntax Meaning

Addi)onassignment a+=b a=a+b

Subtrac)onassignment a-=b a=a-b

Mul)plica)onassignment a*=b a=a*b

Divisionassignment a/=b a=a/b

Moduloassignment a%=b a=a%b

BitwiseANDassignment a&=b a=a&b

BitwiseORassignment a|=b a=a|b

BitwiseXORassignment a^=b a=a^b

Bitwisele�shi�assignment a<<=b a=a<<b

Bitwiserightshi�assignment a>>=b a=a>>b

Introduk)onC-programmering

h~p://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Compound_assignment_operators

49

Page 50: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

If-elsesatserintx=-4;if(x==0){

//...} if(x){

//...}else{

//...}

Introduk)onC-programmering

Utvärderar)llfalskt,körej.

Utvärderas)llsant,kör,ty(x!=0)

•  Nollbetraktassomfalskt.•  Alltsomärskiltfrånnollbetraktassomsant.

50

Page 51: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Looparintx=5;while(x!=0)

x--;

Introduk)onC-programmering

intx=5;while(x)

x--;

intx;for(x=5;x;)

x--;

Treekvivalentaloopar.Omingamåsvingaranvändssåärloop-kroppene~endau~ryck.

51

Page 52: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Nästaföreläsning:Pekare

Page 53: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Pekare•  Hare~värdeochentyp– Värdetärenminnesadress.– Typentalaromvadsomfinnsdär.

Introduk)onC-programmering 53

Page 54: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Operatorerförpekare

Operatorname Syntax

Arraysubscript a[b]

Indirec)on("objectpointedtobya") *aReference("addressofa") &a

Structuredereference("memberbofobjectpointedtobya") a->b

Structurereference("memberbofobjecta") a.b

Introduk)onC-programmering

h~p://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Member_and_pointer_operators

Sistaoperatornärföra~refereramedlemmaravenstruktur(struct),såejenpekareoperator.

54

Page 55: Introduk)on C-programmeringuffe/MOP/Intro_C-programmering.pdf · 2015-11-17 · C – Bakgrund • Short Code, 1949, 1:st high level language • Autocode, early 50’ies. • Fortran,

Spelaspelet•  Consolen–  IngaexternaAPIs–  “allapla�ormar”

•  InterntfullHD•  “objektorienterads)l”– Anima)on,object,enemy,player,text

•  h-filervisarstrukturen•  Realis)skstruktur(texFPS)–  Bytut2D)ll3Dför

•  Anima)on,collisiondetec)on(boxar)

55