Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />
5.2 Initialisierung von Variablen<br />
Variablen von e<strong>in</strong>fachen Datentypen können folgendermassen <strong>in</strong>itialisiert werden.<br />
<strong>in</strong>t Laenge = 15;<br />
double Z<strong>in</strong>s = 5.25;<br />
long <strong>in</strong>t Sek<strong>und</strong>en = 2562435L;<br />
Wenn mehrere Variablen auf e<strong>in</strong>er Zeile def<strong>in</strong>iert <strong>und</strong> <strong>in</strong>itialisiert werden, müssen sie e<strong>in</strong>zeln <strong>in</strong>itialisiert<br />
werden:<br />
<strong>in</strong>t x=17, y=17, z=25;<br />
Bei der Initialisierung wird der Variable gleich bei der Erzeugung e<strong>in</strong> bestimmter Wert zugewiesen.<br />
Nicht <strong>in</strong>itialisierte globale Variablen werden automatisch auf den Wert 0 gesetzt, lokale Variablen<br />
h<strong>in</strong>gegen haben zufälligen Inhalt, wenn sie nicht <strong>in</strong>itialisiert werden!!!!<br />
Auf den Unterschied zwischen globalen <strong>und</strong> lokalen Variablen wird im Kapitel Funktionen noch<br />
näher e<strong>in</strong>gegangen.<br />
5.3 Deklaration von Variablen<br />
Bei der Deklaration e<strong>in</strong>er Variablen wird dem Compiler nur bekanntgemacht, dass es e<strong>in</strong>e Variable<br />
e<strong>in</strong>es bestimmten Typs gibt, es wird aber ke<strong>in</strong> Speicherplatz dafür reserviert. Die Variable muss<br />
deshalb woanders (meist <strong>in</strong> e<strong>in</strong>em anderen Modul) def<strong>in</strong>iert werden. Um e<strong>in</strong>e Variable zu deklarieren<br />
wird das Schlüsselwort extern vorangestellt. Nur globale Variablen können extern deklariert<br />
werden.<br />
extern <strong>in</strong>t x; /* Deklaration, es wird ke<strong>in</strong> Speicher belegt */<br />
extern long double UniverselleKonstante;<br />
5.4 Speicherklassen:<br />
Alle Variablen <strong>in</strong> e<strong>in</strong>em Programm werden verschiedenen Speicherklassen zugeordnet. Es gibt <strong>die</strong><br />
Klasse Static, <strong>die</strong> Klasse Automatic <strong>und</strong> <strong>die</strong> Klasse Register.<br />
Die Zuordnung zu den Speicherklassen erfolgt mit den Schlüsselworten register, auto,<br />
static <strong>und</strong> extern sowie dem Ort der Def<strong>in</strong>ition (Innerhalb oder ausserhalb von Blöcken).<br />
Globale Variablen (Ausserhalb von Blöcken def<strong>in</strong>ierte) <strong>und</strong> static Variablen gehören zur Klasse<br />
Static. Sie werden zu Beg<strong>in</strong>n des Programmlaufes e<strong>in</strong>mal <strong>in</strong>itialisiert <strong>und</strong> s<strong>in</strong>d bis zum Ende des<br />
Programmlaufes ständig verfügbar, sie existieren während des gesamten Programmlaufs.<br />
Nur Variablen <strong>in</strong>nerhalb von Blöcken (Mit {} e<strong>in</strong>geschlossene Anweisungen) können zu den Klassen<br />
Automatic oder Register gehören. Variablen der Speicherklasse Automatic werden automatisch<br />
erzeugt, wenn der Programmlauf <strong>in</strong> ihren Block e<strong>in</strong>tritt, <strong>und</strong> wieder gelöscht, wenn der Block verlassen<br />
wird. Alle Variablen, <strong>die</strong> <strong>in</strong>nerhalb von Blöcken def<strong>in</strong>iert werden, s<strong>in</strong>d per Default automatische<br />
Variablen, deshalb wird das Schlüsselwort auto eigentlich kaum verwendet.<br />
Variablen der Speicherklasse Register werden <strong>in</strong> Prozessorregister abgelegt, wenn <strong>die</strong>s möglich ist.<br />
Das ist s<strong>in</strong>nvoll für Variablen <strong>die</strong> besonders oft verwendet werden. Auf Variablen <strong>die</strong>ser Klasse<br />
kann jedoch der Adressoperator nicht angewendet werden, da Register ke<strong>in</strong>e Speicheradresse besitzen.<br />
Bei modernen Compiler ist das Schlüsselwort register eigentlich auch überflüssig, da sie<br />
sehr gute Optimierungsalgorithmen besitzen <strong>und</strong> Codeanalysen durchführen, um selbst oft gebrauchte<br />
Variablen <strong>und</strong> Werte zu identifizieren, <strong>und</strong> <strong>die</strong>se selbständig <strong>in</strong> Register ablegen. Mit dem<br />
Schlüsselwort register kann man <strong>die</strong>se Optimierungen sogar stören oder zunichte machen.<br />
Gedruckt am 11.09.2008 13:04:00 Letzte Änderung am: 11. September 2008 Version 2.4, I. Oesch 20/147