Dienstag, 23 Feb, 2010

Grundlagen C

Hallo an diese Stelle möchte ich euch die Grundlagen zur Sprache C nahe bringen, damit euerer Spiele entwicklung nichts mehr im Weg steht.

Wie in jeden Buch oder Tutorial biginnen wir auch hier mit einem “Hello World” Programm, nur das wir uns jedes Vorgeplänkel sparen und sofort beginnen.

Also schaut euch mal dieses Programm an:

#include <stdio.h>
	
void main( ){
    printf("Hey schaut mal ich lerne C!!!");
}

Ausgabe: Hey schaut mal ich lerne C!!!

So biginnen wir von Anfangan das Programm uns anzu schauen.
#include <stdio.h> Bindet sogenante Header Dateien ein. Was in unserem Fall bedeutet es erweitert den nativ C Befehlsumfang um weiter Befehle. Nun ihr werdet euch fragen warum müssen wir schon bei einem Hello World unsere C Befehle erweitern. stdio steht für standard input/otput und da wir etwas augeben möchten brauchen wir diesen Befehlsumfang. Ohne den input/output Befehlen könnten wir nichts Anzeigen.

void Main() Heist die Hauptfunktion die bei einem Programmstart aufgerufen wird. Doch was ist eigentlich so eine Funktion. Eine Funktion bündelt mehere Befehle zu eine Gruppe. Dazu gibt es aber später mehr.

printf ist der Eigentlich Ausgabebefehle, der unseren Text auf dem Bildschirm ausgibt.

Was gibt es noch bei dem Beispiel zu sehen? Nun ihr könnt sehen das Befehle imm mit einem “;” abgeschlossen werden (außer einige Ausnahmen wie z.B. das include) und das Funktionen mit den Gescheiften Klammern eingeramt werden.

Okay nun seit ihr ja aufgewärmt und wir können direkt weiter machen.

Variablen

Puh ich glaube die Überschrift kam jetzt überaschent, denn was sind zum Teufel Variablen. Variablen speichern zur Laufzeit eines Programmes Informationen und je nach Information gibt es Verschiedene Variablen, die alle unterschiedliche Datentypen speichern können. Hier mal die wichtigsten Datentypen von C:

  • char - speichert ein Zeichen
  • int - Eine ganze Zahl zwischen -32 768 .. 32 767
  • long - Eine ganze Zahl zwischen -2 147 483 648 .. 2 147 483 647
  • unsigned int - Eine ganze Zahl zwischen 0 .. 65 535
  • float - Eine Kommazahle zwischen 1.17E-38 .. 3.4E38
  • double - Eine Kommazahle zwischen 2.2E-308 .. 1.8E308

Nun wenn man die Auflistung so sieht könnte man zum Schluss kommen “Dann nehm ich doch immer den Datentyp der das meiste Speicher kann”. Das ist jedoch eine Schlechte Idee da jeder Datentayp einen gewisse Menge an Speicher belegt. Schauen wir uns also noch einmal die Tabelle unter dem Gesichtspunkt des Speicher bedarfes in Byte (zur erinnerung 8 Bit sind ein Byt) an.

  • char - 1 Byte
  • int - 2 Byte
  • long - 4 Byte
  • unsigned int - 2 Byte
  • float - 4 Byte
  • double - 8 Byte

Es ist also immer Sinnvoll genau den Datentyp zu benutzen den man Wirklich braucht um nicht Speicher zu verschwenden. Desweiteren ist zu beachten das je nach System ein Datentype wie z.B. auch 4Byte benötigen kann. Der Speicherbedarf der Datentypen ist also auch System abhängig.

Aber last uns noch mal genau den “char” anschauen, bevor wir unser neues Wissen anwenden. Was heist es eigentlich ein Zeichen zu Speichern? Nun im Grunde Speichert der Datentyp char kein zeichen sondern eine Zahl zwischen -128 und 128 (es gibt auch ein unsigned char der eine Zahl zwischen 0 und 255 speichern kann). Diese Zahl steht dann für ein Zeichen, der mittels des ASCI-Codes interpritiert wird (es gibt neben dem ASCI Zeichensatz auch noch andere, was aber den Rahmen an dieser Stelle sprengen würde). ASCI ist eine Tabelle die einer Zahl ein Zeichen zuordent schau wir uns mal die ASCI-Table an:

Dezimal	Zeichen		Beschreibung
0		Ctrl-@ 		Null prompt, Null character, Null, Nul 
1		Ctrl-A 		Start of header, Kopfbeginn 
2		Ctrl-B 		Start of text, Textstart 
3		Ctrl-C 		End of text, Textende 
4		Ctrl-D 		End of transmission, Ende der Übertragung 
5		Ctrl-E 		Enquiry, Anfrage 
6		Ctrl-F 		Acknowledge, Bestätigung 
7		Ctrl-G 		BELL, Klingeln (Tonsignal), BEL bell 
8		Ctrl-H 		GET Backspace, Rückschritt 
9		Ctrl-I 		Horizontal tab, Horizontaltabulator, TCT HT Tab 
10		Ctrl-J 		Line feed, Zeilenvorschub, new line 
11		Ctrl-K 		Vertical tab, Vertikaltabulator 
12		Ctrl-L 		Form feed, Seitenvorschub, new page 
13		Ctrl-M 		Carriage return, Wagenrücklauf 
14		Ctrl-N 		Shift out, Breitschrift 
15		Ctrl-O 		Shift in, Enge Schrift 
16		Ctrl-P 		Data link escape, Verbindungs-Steuerung 
17		Ctrl-Q 		Device control 1, LLO, go, XON, xon, Gerätesteuerung 1 
18		Ctrl-R 		Device control 2, c-R, c-r, Gerätesteuerung 2 
19		Ctrl-S 		Device control 3, stop, XOFF, xoff, c-S, c-s, Gerätesteuerung 3 
20		Ctrl-T 		Device control 4, DCL, c-T, c-t, Gerätesteuerung 4 
21		Ctrl-U 		PPU, Negative acknowledge, Negative Bestätigung 
22		Ctrl-V 		Synchronous idle, c-V, c-v, synchronisierter Leerlauf 
23		Ctrl-W 		End of transmission blocks, Ende des Übertragungsblocks 
24		Ctrl-X 		Cancel, SPE c-X, c-x, Abbruch 
25		Ctrl-Y 		End of medium, SPD, c-Y, c-y, Ende des Mediums 
26		Ctrl-Z 		Substitute, Suspend, c-Z, c-z, Ersetzen 
27		Ctrl-[ 		Escape, c-[ c-{ m-, Steuerung, Strg 
28		Ctrl-\ 		File Separator, Datei-Trenner 
29		Ctrl-] 		Group Separator, Gruppen-Trenner 
30		Ctrl-^ 		Record Separator, Datensatz-Trenner 
31		Ctrl-_ 		Unit Separator, Einheiten-Trenner 
	
Sonderzeichen und Ziffern:
Dezimal	Zeichen		Beschreibung
32				Leerzeichen
33		! 		Ausrufungszeichen, exclamation mark, exclamation-point 
34		" 		(Doppeltes) Anführungszeichen, straight-double-quotation-mark, (double) quotation mark, APL Quote 
35		# 		Nummernzeichen, Doppelkreuz, Hash, number-sign she sharp crosshatch octothorpe 
36		$ 		Dollarzeichen 
37		% 		Prozentzeichen 
38		& 		Kaufmännisches UND, Ampersand, Et-Zeichen, Und-Zeichen 
39		' 		Apostroph, Einfaches Anführungszeichen, quote tick prime 
40		( 		Runde Klammer auf 
41		) 		Runde Klammer zu 
42		* 		Stern, Asterisk, star, wildcard, times, Hale 
43		+ 		Pluszeichen, Additions-Zeichen, And 
44		, 		Komma 
45		- 		Minuszeichen, Subtraktions-Zeichen, Negativ(-Zeichen), hyphen 
46		. 		Punkt, period, dot, decimal, radix, full-stop 
47		/ 		Schrägstrich, Slash 
48		0 		Zahl 0 
49		1 		Zahl 1 
50		2 		Zahl 2 
51		3 		Zahl 3 
52		4 		Zahl 4 
53		5 		Zahl 5 
54		6 		Zahl 6 
55		7 		Zahl 7 
56		8 		Zahl 8 
57		9 		Zahl 9 
58		: 		Doppelpunkt, Colon 
59		; 		Semikolon 
60		< 		Kleiner-als-Zeichen 
61		= 		Gleichheitszeichen, equals 
62		> 		Grösser-als-Zeichen 
63		? 		Fragezeichen, UNL, 
	
Großbuchstaben:
Dezimal	Zeichen	Beschreibung
64		@ 		Klammeraffe bzw. "at", commercial at sign 
65		A 		Grossbuchstabe A 
66		B 		Grossbuchstabe B 
67		C 		Grossbuchstabe C 
68		D 		Grossbuchstabe D 
69		E 		Grossbuchstabe E 
70		F 		Grossbuchstabe F 
71		G 		Grossbuchstabe G 
72		H 		Grossbuchstabe H 
73		I 		Grossbuchstabe I 
74		J 		Grossbuchstabe J 
75		K 		Grossbuchstabe K 
76		L 		Grossbuchstabe L 
77		M 		Grossbuchstabe M 
78		N 		Grossbuchstabe N 
79		O 		Grossbuchstabe O 
80		P 		Grossbuchstabe P 
81		Q 		Grossbuchstabe Q 
82		R 		Grossbuchstabe R 
83		S 		Grossbuchstabe S 
84		T 		Grossbuchstabe T 
85		U 		Grossbuchstabe U 
86		V 		Grossbuchstabe V 
87		W 		Grossbuchstabe W 
88		X 		Grossbuchstabe X 
89		Y 		Grossbuchstabe Y 
90		Z 		Grossbuchstabe Z 
91		[ 		Eckige Klammer auf 
92		\ 		Backslash, left-slash, bash 
93		] 		Eckige Klammer zu, right-bracket, close-square 
94		^ 		Caret, Hut, circumflex 
95		_ 		Unterstrich, spacing underscore, low line, horizontal bar 
	
Kleinbuchstaben:
Dezimal	Zeichen	Beschreibung
96		` 		Back quote, Accent-grave, Backprime, spacing grave, accent, back apostrophe 
97		a 		Kleinbuchstabe a, alpha 
98		b 		Kleinbuchstabe b, bravo 
99		c 		Kleinbuchstabe c, charlie 
100		d 		Kleinbuchstabe d, delta 
101		e 		Kleinbuchstabe e, echo 
102		f 		Kleinbuchstabe f, foxtrot (fox) 
103		g 		Kleinbuchstabe g, golf 
104		h 		Kleinbuchstabe h, hotel 
105		i 		Kleinbuchstabe i, india 
106		j 		Kleinbuchstabe j, juliett 
107		k 		Kleinbuchstabe k, kilo 
108		l 		Kleinbuchstabe l, lima 
109		m 		Kleinbuchstabe m, mike 
110		n 		Kleinbuchstabe n, november 
111		o 		Kleinbuchstabe o, oscar 
112		p 		Kleinbuchstabe p, papa 
113		q 		Kleinbuchstabe q, quebec 
114		r 		Kleinbuchstabe r, romeo 
115		s 		Kleinbuchstabe s, sierra 
116		t 		Kleinbuchstabe t, tango 
117		u 		Kleinbuchstabe u, uniform 
118		v 		Kleinbuchstabe v, victor 
119		w 		Kleinbuchstabe w, whiskey 
120		x 		Kleinbuchstabe x, x-ray 
121		y 		Kleinbuchstabe y, yankee 
122		z 		Kleinbuchstabe z, zulu 
123		{ 		Geschweifte Klammer auf, left brace, curly bracket, begin, leftit 
124		| 		Vertikale Linie, Logisches oder, vertical bar 
125		} 		Geschweifte Klammer zu, right-brace, end, rightit 
126		~ 		Tilde, similar, tilde accent 
127		 		Delete or rubout 

So da wir jetzt auch gesehen haben wie Zeichen dargestellt/interpritiert werden und ihr die ASCI Tabelle auswendiggelernt habt, geht es jetzt zur Umsetzung.

So deklariert man eine Varaiable mit dazugehörigen Daten typ

// Variable Zahl mit Datentyp iniger

int zahl;

//Wie zuvor nur das gleich ein Wert zugewiesen wird

int zahl = 5;

Nun gibt es noch die Nöglichkeit eine Variable als Konstante fest zu legen, was einfach nur bedeutet das diese Varible zur Laufzeit nicht geändert wird.

//Zahl als Konstante

const int zahl = 5;

Und jetzt wenden wir das ganze auf unser Hello Worl an:

#include <stdio.h>
	
void main( ){
    int zahl = 5;
    float kommazahl = 4.7;
    char zeichen = 'c';
    printf("Zahl: %i , Kommazahl: %.2f , Zeichen: %c, Zeichen als Zahl dargestellt: %i", zahl, kommazahl, zeichen, zeichen);
}

Ausgabe: Zahl: 5 , Kommazahl: 4.70 , Zeichen: c, Zeichen als Zahl dargestellt: 99

Wir haben als erstes 3 Variablen zum Programmstart angelegt (dies muss bei C immer zum Programmstart erfolgen). Eine Zahl, eine Kommazahl und eine Zeichen Variable. Dann geben wir die Variablen mit Printf aus. Stört euch jetzt bitte nicht am Printf, das wird zu einem späteren Zeitpunkt erklärt. Konzentriert euch auf die Ausgabe die sowohl das “c” als auch die dazugehörige Zahl “99” zeigt.

Erweiterte Datentypen

Im vorangegangenen Punkt habt ihr Variablen und einfache Datentypen kennen gelern. Nun ist es aber auch möglich erweiterte Daten Typen zu nutzen. Was genau Erweiterte Datentypen sind schauen wir uns jetzt an.