Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Introduk)onC-programmering
UlfAssarsson
OriginalslidesavViktorKämpe
2
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
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
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
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)))))
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”.
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
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
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
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
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
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
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
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.
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)
• 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
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, …)
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
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
ÖversiktC–fyralek)oner• Lekt1:intro)llC• Lekt2+3:pekare• Lekt4:mixaCochassembler
Introduk)onC-programmering 21
C–Standarder• 1978, K&RC (Kernighan&Ritchie)• 1989, C89/C90 (ANSI-C)• 1999, C99 (Rev.ANSI-standard)• 2011, C11 (Rev.ANSI-standard)
22
Helloworld!–program#include<stdio.h>intmain(){printf(“HelloWorld!\n");return0;
}
23
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;
};
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
Integreradutvecklingsmiljö(IDE)
Bygg
Kör
TexCodeLitesomärgra)sochopen-source.(h~p://codelite.org/)
26
Frånterminalen> gcc –o hello.exe main.c
> hello.exe Hello World!
>
Introduk)onC-programmering
Bygg
Kör
27
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
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
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
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.)
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
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
Synlighet/Visibility/Scope• Globalsynlighet (globalscope)• Filsynlighet (filescope)• Lokalsynlighet (e.g.func)onscope)
Introduk)onC-programmering 34
Synlighet#include<stdlib.h>charx;intfoo(){
//xärsynlig//yärintesynlig
}chary;
Introduk)onC-programmering 35
Synlighetpåfunk)onsnivå#include<stdlib.h>charx;intfoo(floatx){
//argumentetx(float)ärsynligt}
Introduk)onC-programmering 36
Synlighetpåfunk)onsnivå#include<stdlib.h>charx;intfoo(){
intx=4;returnx;
}
Introduk)onC-programmering 37
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
Funk)onsprototyper#include<stdio.h>//funktionsprototypintfoo(intx);intmain(){
printf("xis%i",foo(0));return0;
}intfoo(intx){
//funktionskropp}
Introduk)onC-programmering 39
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
Frånkällkod)llexekverbar1. Preprocessing2. Kompilering3. Länkning
Introduk)onC-programmering 41
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
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
Länkning• Sä~ersamman(flera)objek�iler)llenexekverbarfil(.exe).
• Översä~ersymbolerna)ll(rela)va)adresser.
Introduk)onC-programmering 44
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
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
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
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
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
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
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
Nästaföreläsning:Pekare
Pekare• Hare~värdeochentyp– Värdetärenminnesadress.– Typentalaromvadsomfinnsdär.
Introduk)onC-programmering 53
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
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