Introduk)on C-programmering

Relevanta dokument
Introduk)on C- programmering

Introduktion C-programmering

Repetition C-programmering

Pekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe

Grundläggande C-programmering

Grundläggande C-programmering del 1 - För maskinorienterad programmering

Grundläggande C-programmering del 1 - För maskinorienterad programmering

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Imperativ programmering. Föreläsning 3

En kort text om programmering i C.

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Programmering A. Johan Eliasson

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

SMD 134 Objektorienterad programmering

Introduk+on +ll programmering i JavaScript

Grundläggande datalogi - Övning 1

Programmeringsteknik med C och Matlab

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Att komma igång. Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Tentamen Grundläggande programmering

Föreläsning 3: Booleans, if, switch

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Klassdeklaration. Metoddeklaration. Parameteröverföring

TDDC77 Objektorienterad Programmering

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

F4. programmeringsteknik och Matlab

Övning2. Variabler. Data typer

6.1 Kompilering och lite grundläggande information

Sista delen av kursen

Programspråkslingvistik. Sista delen av kursen. Ett programspråk

C-programmering. Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur

Sista delen av kursen

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2014

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

Föreläsning 6: Introduktion av listor

Det finns många flaggor till g++,

TDIU01 - Programmering i C++, grundkurs

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Tentamen i Programmering grundkurs och Programmering C

Pascal... Pascal. Pascal... Pascal...

Funktionens deklaration

Du ska nu skapa ett litet program som skriver ut Hello World.

EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Administration. EDAf30: Programmering i C++, 7.5 hp Obligatoriska moment

TDP002 Imperativ programmering

Programmering för språkteknologer I, VT2012. Rum

Programmering av inbyggda system. Pekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Grundkurs Programmering

Föreläsning 3. Programmering, C och programmeringsmiljö

Att använda pekare i. C-kod

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Classes och Interfaces, Objects och References, Initialization

Winstrand Development

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Tentamen OOP

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

DD1361 Programmeringsparadigm. Carina Edlund

Ulf Assarsson. Grundläggande C-programmering del 3. Läromoment: Grundläggande C-programmering del 3

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Exempel på ett litet Ada-program

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Skizz till en enkel databas

Hjälpmedel för kompilatorkonstruktion, DVB004

TDDE10 TDDE11, 725G90. Gemensam kurswebsida på:

IT för personligt arbete F6

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Vad är det och hur definierar vi en Biblioteksfunktioner (math) Top-down-programmering lokala globala variabler Arrays som in-parametrar

Föreläsning 2: Avlusning och antilustekniker

Data, typ, selektion, iteration

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Föreläsning 5: Rekursion

OBS! All teori i detta och följande dokument kompletteras med genomgångar på lektionerna. Så det är viktigt att närvara och göra egna anteckningar.

lex källkod lex.l lexkompilator lex.yy.c C- kompilator lex.yy.c a.out sekvens av tokens a.out input specifikation av tokens mha reguljära uttryck

Tecken. char. char ch = A ; sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char namn[]= "Nils"; // längd = 5 bytes

1 Funktioner och procedurell abstraktion

OOP Objekt-orienterad programmering

TDP002 - Imperativ programmering

C-programmering, föreläsning 2 Jesper Wilhelmsson

Varför behövs det? I Allegro finns t.ex. stöd för:

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Deklarationer/definitioner/specifikationer

2.4. Teckensträngar och logiska uttryck

VHDL Basics. Component model Code model Entity Architecture Identifiers and objects Operations for relations. Bengt Oelmann -- copyright

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Sockets: server. with Ada.Command_Line; use Ada.Command_Line; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.

Föreläsning 7. Nyckelord I Java. Uttryck. Uttryck, Operatorer Och Kontrollflöden

Transkript:

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

2

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58. Cobol 60 (Common Business-oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic Language 1960). Simula, 60:ies. C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. Introduk)on C-programmering 3

C Bakgrund Short Code, 1949, 1:st high level language Kompilerades varje gång Autocode, early 50 ies. Hade compiler Fortran, IBM, ~57. Finns kvar pga mycket legacy code Lisp, 58 Cobol 60 (Common Business-oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic Language 1960). Simula, 60:ies. C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. Introduk)on C-programmering 4

C Bakgrund Short Code, 1949, 1:st high level language Kompilerades varje gång Autocode, early 50 ies. Hade compiler Fortran, IBM, ~57. Finns kvar pga mycket legacy code Lisp, Fortran 58 Cobol C AREA 60 OF (Common A TRIANGLE Business-oriented - HERON'S FORMULA language. BASIC, C INPUT 1964. - CARD READER UNIT 5, INTEGER INPUT ALGOL C OUTPUT 60 (ALGOrithmic - LINE PRINTER Language UNIT 6, REAL 1960). OUTPUT C INPUT ERROR DISPAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING Simula, 60:ies. INTEGER A,B,C C, ~1969. READ(5,501) A,B,C Prolog, 501 FORMAT(3I5) 1972. Ada, IF(A.EQ.0 ~1975.OR. B.EQ.0.OR. C.EQ.0) STOP 1 Pascal, S = ~1975. (A + B + C) / 2.0 ML, 1978. AREA = SQRT( S * (S - A) * (S - B) * (S - C)) WRITE(6,601) A,B,C,AREA 601 FORMAT(4H A=,I5,5H B=,I5,5H C=,I5,8H AREA=,F10.2,12HSQUARE UNITS) STOP END Introduk)on C-programmering 5

C Bakgrund Short Code, 1949, 1:st high level language Kompilerades varje gång Autocode, early 50 ies. Hade compiler Fortran, IBM, ~57. Finns kvar pga mycket legacy code Lisp, 58 För matema)k/ai. Cobol 60 (Common Business-oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic Language 1960). Simula, 60:ies. C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. Lisp (defun factorial (n) (if (= n 0) 1 (* n (factorial (- n 1))))) Introduk)on C-programmering 6

C Bakgrund Short Code, 1949, 1:st high level language Kompilerades varje gång Autocode, early 50 ies. Hade compiler Fortran, IBM, ~57. Finns kvar pga mycket legacy code Lisp, 58 För matema)k/ai. Cobol 60 (Common Business-oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic Language 1960). Simula, 60:ies. C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. Impera)vt, procedurellt, idag objektorienterat För business + finance. Pra)gt. COBOL IDENTIFICATION DIVISION. PROGRAM-ID. HELLO-WORLD. PROCEDURE DIVISION. DISPLAY 'Hello, world'. STOP RUN. Introduk)on C-programmering 7

C Bakgrund Short Code, 1949, 1:st high level language Kompilerades varje gång Autocode, early 50 ies. Hade compiler Fortran, IBM, ~57. Finns kvar pga mycket legacy code Lisp, 58 För matema)k/ai. Cobol 60 (Common Business-oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic Language 1960). Simula, 60:ies. C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. Impera)vt, procedurellt, idag objektorienterat BASIC 5 LET S = 0 10 MAT INPUT V 20 LET N = NUM 30 IF N = 0 THEN 99 40 FOR I = 1 TO N 45 LET S = S + V(I) 50 NEXT I 60 PRINT S/N 70 GO TO 5 99 END Introduk)on C-programmering 8

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business-oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic Language 1960). Simula, 60:ies. C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Influerade C Impera)vt, procedurellt, idag objektorienterat Introduk)on C-programmering 9

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business-oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic ALGOL Language 1960). Simula, 60:ies. C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Impera)vt, procedurellt, idag objektorienterat Influerade C procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k); value n, m; array a; integer n, m, i, k; real y; begin integer p, q; y := 0; i := k := 1; for p:=1 step 1 unnl n do for q:=1 step 1 unnl m do if abs(a[p, q]) > y then begin y := abs(a[p, q]); i := p; k := q end end Absmax Introduk)on C-programmering 10

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business-oriented language. BASIC, 1964. Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Impera)vt, procedurellt, idag objektorienterat ALGOL 60 (ALGOrithmic Language 1960). Influerade C Simula, 60:ies. 1:a objektorienterade språk, klasser, virtuella metoder, objekt, arv, C, ~1969. trådar Prolog, 1972.! Simula Begin Ada, ~1975 OutText ("Hello World!"); Pascal, ~1975. OuNmage; ML, 1978. End; Introduk)on C-programmering 11

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business-oriented language. BASIC, 1964. Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Impera)vt, procedurellt, idag objektorienterat ALGOL 60 (ALGOrithmic Language 1960). Influerade C Simula, 60:ies. 1:a objektorienterade språk, klasser, virtuella metoder, objekt, arv C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. /* C */ int main() { printf( Hello World!\n"); return 0; } Introduk)on C-programmering 12

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business-oriented language. BASIC, 1964. Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Impera)vt, procedurellt, idag objektorienterat ALGOL 60 (ALGOrithmic Language 1960). Influerade C Simula, 60:ies. 1:a objektorienterade språk, klasser, virtuella metoder, objekt, arv C, ~1969. Prolog, 1972. AI/lingvis)k. Facts/rules, queries over rela)onships Ada, ~1975 Pascal, ~1975. ML, 1978. Prolog?- write('hello world!'), nl. Hello world! true.?- Introduk)on C-programmering 13

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business-oriented language. BASIC, 1964. Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Impera)vt, procedurellt, idag objektorienterat ALGOL 60 (ALGOrithmic Language 1960). Influerade C Simula, 60:ies. 1:a objektorienterade språk, klasser, virtuella metoder, objekt, arv C, ~1969. Prolog, 1972. AI/lingvis)k. Facts/rules, queries over rela)onships Ada, ~1975 Impera)vt, procedurellt, idag objektorienterat Pascal, ~1975. ML, 1978. with Ada.Text_IO; use Ada.Text_IO; procedure Hello is begin Put_Line ("Hello, world!"); end Hello; Introduk)on C-programmering 14

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business-oriented language. BASIC, 1964. Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Impera)vt, procedurellt, idag objektorienterat ALGOL 60 (ALGOrithmic Language 1960). Influerade C Simula, 60:ies. 1:a objektorienterade språk, klasser, virtuella metoder, objekt, arv C, ~1969. Prolog, 1972. AI/lingvis)k. Facts/rules, queries over rela)onships Ada, ~1975 Impera)vt, Pascal procedurellt, idag objektorienterat Pascal, ~1975. Program HelloWorld; Impera)vt, procedurellt, idag objektorienterat ML, 1978. Begin WriteLn('Hello world!') {no ";" is required aper the last statement of a block - adding one adds a "null statement" to the program} End. Introduk)on C-programmering 15

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business-oriented language. BASIC, 1964. Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Impera)vt, procedurellt, idag objektorienterat ALGOL 60 (ALGOrithmic Language 1960). Influerade C Simula, 60:ies. 1:a objektorienterade språk, klasser, virtuella metoder, objekt, arv C, ~1969. Prolog, 1972. AI/lingvis)k. Facts/rules, queries over rela)onships Ada, ~1975 Impera)vt, procedurellt, idag objektorienterat Pascal, ~1975. Impera)vt, procedurellt, idag objektorienterat ML, 1978. Funk)onellt, rekursivt. Föregångare )ll Haskell. fun fac (0 : int) : int = 1 fac (n : int) : int = n * fac (n - 1) Introduk)on C-programmering 16

C Bakgrund Maskinnära programmering: Behöver språk med pekare )ll absoluta adresser Basic, Ada 95 (och senare versioner), C, C++, C# (med nyckelordet unsafe), Objec)ve-C, D, COBOL, Fortran. C - 1969 C++ - 1983 (Ada 1995) C# - 2000, strong type checking, garbage collec)on, obj. oriented, COOL. D - 2001 Introduk)on C-programmering 17

Google EON Autodesk Surgical Science Mentice Vizendo Spark Vision ABB DICE / EA EA Ghost Games 2K Sports - C 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, Bell Labs ~1969 C: Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. E~ utav de mest använda språken. C++, D. Maskinnära, pekare, front/backend Introduk)on C-programmering 19

C respek)ve Assembler Varför C istället för assembler? Färre rader kod, mindre risk för fel, snabbare Varför förstå hur C kompileras )ll assembler? prestandaop)mering och resonera kring prestanda ( tex för datorgrafik, GPU:er, HPC). Hur mycket snabbare är en while-loop än rekursion? Loop-unroll? energikonsump)on säkerhet/robusthet/risker Kunna debugga Kunna mixa C/asm vid drivru)nsprogrammering eller prestandakri)ska förlopp. SIMD: Intel s SSE Introduk)on C-programmering 20

Översikt C fyra lek)oner Lekt 1: intro )ll C Lekt 2+3: pekare Lekt 4: mixa C och assembler Introduk)on C-programmering 21

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

Hello world! program #include <stdio.h> int main() { printf( Hello World!\n"); return 0; } 23

C vs Java. Några skillnader: C: saknar klasser. Har dock structs för sammansa~a datatyper. struct Course { char* name; float credits; int numberofparticipants; }; Booleans är ej egen typ. true/false finns ej. 0 är false. E~ värde!= 0 är true. Därför definierar man o a TRUE/FALSE som 1 resp 0. 1 && 1 = Implementa)onsspecifikt för kompilatorn. 24

Mer C: Type conversion default: convert narrower format to the wider format Synlighet: global synlighet, synlighet i funk)on resp scope. #include <stdio.h> int x; int foo(int x) { } if( x == 0 ){ int x = 4; return x; } return x; float a; a = 1.0 / 3; // a == 0.33333343 int main() { } x = 1; x = foo(0); printf("x is %i", x); return 0; 25

Integrerad utvecklings miljö (IDE) Kör Bygg T ex CodeLite som är gra)s och open-source. (h~p://codelite.org/ ) 26

Från terminalen > gcc o hello.exe main.c > hello.exe Hello World! > Bygg Kör Introduk)on C-programmering 27

Variabler #include <stdio.h> int x; int main() { char y; x = 32; y = 'a'; x = x + y; Typ Variabelnamn } printf("x har nu värdet %i och y har värdet %i som kodar tecknet %c\n", x, (int)y, y); return 0; Utskri : x har nu värdet 129 och y har värdet 97 som kodar tecknet a Introduk)on C-programmering 28

Deklara)oner och )lldelningar #include <stdio.h> int x; int main() { char y; x = 32; y = 'a'; Deklara)oner Tilldelningar x = x + y; } printf("x har nu värdet %i och y har värdet %i som kodar tecknet %c\n", x, (int)y, y); return 0; En deklarerad variabel som ännu inte )lldelats e~ värde är oinivaliserad Introduk)on C-programmering 29

Typkonverteringar #include <stdio.h> int x; int main() { char y; Implicit typkonvertering x = 32; y = 'a'; x = x + y; Explicit typkonvertering } printf("x har nu värdet %i och y har värdet %i som kodar tecknet %c\n", x, (int)y, y); return 0; Typkonvertering kallas också cast, och man säger a~ man castar. Introduk)on C-programmering 30

ASCII Finns det bara en ASCII-tabell? Nej Det finns flera olika ASCII extensions (övre 128 värdena), beroende på språk. ISO 8859-1, also called ISO LaVn 1, ISO 8859-2 for Eastern European languages, and ISO 8859-5 for Cyrillic languages (Terminaler använder inte nödvändigtvis ASCII-tabellen. Console däremot o ast.) Introduk)on C-programmering 31

C89 deklara)oner först #include <stdio.h> int x; int main() { x = 32; En )lldelning innan deklara)onerna är EJ )llåtet enligt C89 char y = 'a'; x = x + y; } printf("x har nu värdet %i och y har värdet %i som kodar tecknet %c\n", x, (int)y, y); return 0; Fungerar ibland ändå (t ex i CodeLite), men inte i XCC12 som vi ska använda senare. Introduk)on C-programmering 32

Funk)oner #include <stdlib.h> int foo(int x, char y) { int sum = 0; argument } while(y-- > 0) { sum += x*y; } return sum; Returvärde av returtyp Argumenten är pass-by value. int var1; char var2 = 7; var1 = foo(5, var2); var2 har forƒarande värdet 7 e er funk)onsanropet Introduk)on C-programmering 33

Synlighet/Visibility/Scope Global synlighet (global scope) Filsynlighet (file scope) Lokal synlighet (e.g. func)on scope) Introduk)on C-programmering 34

Synlighet #include <stdlib.h> char x; int foo() { // x är synlig // y är inte synlig } char y; Introduk)on C-programmering 35

Synlighet på funk)onsnivå #include <stdlib.h> char x; int foo(float x) { // argumentet x (float) är synligt } Introduk)on C-programmering 36

Synlighet på funk)onsnivå #include <stdlib.h> char x; int foo() { int x = 4; return x; } Introduk)on C-programmering 37

Vilken synlighet har högst prioritet? #include <stdio.h> int x; int foo(int x) { if( x == 0 ){ int x = 4; return x; } } return x; int main() { x = 1; x = foo(0); printf("x is %i", x); return 0; } Vad är x? Introduk)on C-programmering 38

Funk)onsprototyper #include <stdio.h> // funktionsprototyp int foo(int x); int main() { printf("x is %i", foo(0)); return 0; } int foo(int x) { // funktionskropp } Introduk)on C-programmering 39

Programstruktur // main.c #include <stdio.h> #include "foo.h" int main() { } printf("x is %i", foo(0)); return 0; // foo.h int foo(int x); // foo.c #include <stdlib.h> int foo(int x) { if( x == 0 ){ int x = 4; return x; } } return x; c-fil Inkluderar header-fil header-fil Innehåller funk)onsprototyper c-fil header-filen måste inte ha samma namn som c-filen, men det är enklare så. Introduk)on C-programmering 40

Från källkod )ll exekverbar 1. Preprocessing 2. Kompilering 3. Länkning Introduk)on C-programmering 41

Preprocessorn // main.c #include <stdio.h> #include "foo.h" Copy-paste av filer #define MAX_SCORE 100 #define SQUARE(x) (x)*(x) Find-and-replace av strängar int main() { } printf("högsta möjliga poäng är %i\n", MAX_SCORE); printf("kvadraten av 3 är %i\n", SQUARE(1+2)); printf("x is %i", foo(0)); return 0; Preprocessorn arbetar på källkoden på textnivå. Introduk)on C-programmering 42

Kompilering Processar en c-fil i taget Skapar en objekƒil som innehåller: Maskinkod för instruk)oner Symboler för addresser För funk)oner/variabler i objekƒilen. För funk)oner/variabler i andra objekƒiler/bibliotek. Introduk)on C-programmering 43

Länkning Sä~er samman (flera) objekƒiler )ll en exekverbar fil (.exe). Översä~er symbolerna )ll (rela)va) adresser. Introduk)on C-programmering 44

Aritme)ska operatorer Basic assignment Addi)on Subtrac)on Unary plus (integer promo)on) +a Unary minus (addi)ve inverse) -a Mul)plica)on Division Modulo (integer remainder) Increment Decrement Prefix Posƒix Prefix Posƒix a = b a + b a - b a * b a / b a % b h~p://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#arithme)c_operators ++a a++ --a a-- Introduk)on C-programmering 45

Jämförelseoperatorer Equal to Not equal to Greater than Less than Greater than or equal to a == b a!= b a > b a < b a >= b Less than or equal to a <= b h~p://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#comparison_operators.2frela)onal_operators Introduk)on C-programmering 46

Logiska operatorer Logical nega)on (NOT)!a Logical AND Logical OR a && b a b h~p://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#logical_operators Introduk)on C-programmering 47

Bit opera)oner Bitwise NOT ~a Bitwise AND Bitwise OR Bitwise XOR Bitwise le shi Bitwise right shi a & b a b a ^ b a << b a >> b h~p://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#bitwise_operators Introduk)on C-programmering 48

Sammansa~a )lldelsningsoperatorer Operator name Syntax Meaning Addi)on assignment a += b a = a + b Subtrac)on assignment a -= b a = a - b Mul)plica)on assignment a *= b a = a * b Division assignment a /= b a = a / b Modulo assignment a %= b a = a % b Bitwise AND assignment a &= b a = a & b Bitwise OR assignment a = b a = a b Bitwise XOR assignment a ^= b a = a ^ b Bitwise le shi assignment a <<= b a = a << b Bitwise right shi assignment a >>= b a = a >> b h~p://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#compound_assignment_operators Introduk)on C-programmering 49

If-else satser int x = -4; if( x == 0 ){ //... } if( x ){ //... } else { //... } Utvärderar )ll falskt, kör ej. Utvärderas )ll sant, kör, ty ( x!= 0 ) Noll betraktas som falskt. Allt som är skilt från noll betraktas som sant. Introduk)on C-programmering 50

Loopar int x = 5; int x = 5; while( x!=0 ) x--; while( x ) x--; int x; for( x=5; x; ) x--; Tre ekvivalenta loopar. Om inga måsvingar används så är loopkroppen e~ enda u~ryck. Introduk)on C-programmering 51

Nästa föreläsning: Pekare

Pekare Har e~ värde och en typ Värdet är en minnesadress. Typen talar om vad som finns där. Introduk)on C-programmering 53

Operatorer för pekare Operator name Syntax Array subscript a[b] Indirec)on ("object pointed to by a") *a Reference ("address of a") &a Structure dereference ("member b of object pointed to by a") Structure reference ("member b of object a") a->b a.b h~p://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#member_and_pointer_operators Sista operatorn är för a~ referera medlemmar av en struktur (struct), så ej en pekare operator. Introduk)on C-programmering 54

Spela spelet Consolen Inga externa APIs alla plaƒormar Internt fullhd objektorienterad s)l Anima)on, object, enemy, player, text h-filer visar strukturen Realis)sk struktur (t ex FPS) Byt ut 2D )ll 3D för Anima)on, collision detec)on (boxar) 55