referat interpretation charakterisierung

REFERAT-Menü

Deutsch
Geographie
Geschichte
Chemie
Biographien
Elektronik
Englisch
Epochen
Französisch
Biologie
Informatik
Italienisch
Kunst
Latein
Literatur
Mathematik
Musik
Philosophie
Physik
Politik
Psychologie
Recht
Sonstige
Spanisch
Sport
Technik
Wirtschaft
Wirtschaftskunde-BWL

C

C / C++ Sprachelemente

1. VORWORT 2

2. GRUNDLEGENDE REGELN IN C 2 41169udz21cny6z

2.1. Drei Sprachelemente 2

2.2. Definition von Variablen 2

2.2.1. Schlüsselwörter 3

2.2.2. Zeiger 3 dn169u1421cnny

2.2.3. Felder 4

2.3. Funktionsaufruf 4

2.4. Auflösung 4

2.5. Kommentare 5

3. DATENTYPEN 5

3.1. Datentypen für ganze Zahlen (Festkomma) 5

3.1.1. char 6

3.1.2. int 6

3.1.3. short 6

3.1.4. long 6

3.2. Datentypen für Fließkommazahlen 6

3.2.1. float 7

3.2.2. double 7

3.3. Benutzerdefinierte Datentypen 7

3.3.1. Strings 8

3.3.2. enum 8

3.3.3. typedef 9

3.3.4. struct 9

3.3.5. union 10

3.4. Dynamische Speicheranforderung 10

4. SPRACHELEMENTE 11

4.1. Zuweisungen 11

4.2. Selektion, Abfrage 12

4.2.1. if - else 12

4.2.2. switch - case 13

4.2.3. Ternärer Operator 13

4.3. Iterationen, Schleifenbildung 14

4.3.1. while 14

4.3.2. do - while 14

4.3.3. for 15

4.4. Sprungbefehle 15

4.5. Typecast Operatoren 16

4.6. Unterprogramme 16

4.7. Bibliotheken 17

5. OBJEKTORIENTIERTE PROGRAMMIERUNG 17

5.1. Objekte 17

5.2. Datenkapselung (data encapsulation) 18

5.3. Vererbung (inheritance) 18

5.4. Polymorphie (polymorphism) 18

6. QUELLCODE 19

  1. Vorwort

Da C eine sehr komplexe und umfangreiche Sprache ist, möchte ich versuchen, soviel wie möglich zu erklären und zu beschreiben. Die Tatsache, dass C sehr weit verbreitet ist, trägt dazu bei, dass es sehr viele verschiedene Abarten und Versionen dieser Sprache gibt. Um jedoch nicht zu sehr abzuschweifen, werde ich mich nur auf eine Version festlegen. C ist eine Compiler - Sprache, was bedeutet, dass aus dem Quellcode ein Bytecode erzeugt wird, der direkt Anweisungen für den Prozessor enthält. Dieses Übersetzen (to compile - engl.: übersetzen, auflesen) in den Bytecode übernimmt der sogenannte Compiler. Abhängig von der Herstellerfirma übersetzen verschiedene Compiler den selben Code sehr unterschiedlich, was durchaus zu Problemen führen kann. Aus diesem Grund möchte ich den Quellcode, den ich in diesem Referat benutze, nur anhand des Borland Turbo C++ Compiler 3.0 beschreiben.

  1. Grundlegende Regeln in C

C ist eine genormte Sprache, was dazu führt, dass die Art und Weise, wie diese Sprache auszusehen hat, die Syntax, einheitlich sein muss. All diese Regeln sind in ANSI - C festgehalten und müssen erfüllt werden. Standard C ist eine ablauforientierte, modulare Sprache, ohne objektorientierte Elemente.

    1. Drei Sprachelemente

Wie in jeder anderen Sprache gibt es auch in C die drei grundlegenden Sprachelemente:

  1. Sequenz - z.B.: Summe = a + b;

  2. Iteration - z.B.: for(x=0; x<=10; x=x+1);

  3. Selektion - z.B.: if(x == 10)

Hier wird zu jedem Element zwar nur ein Beispiel angegeben, tatsächlich gibt es jedoch sehr viele Variationen. Wie bereits ersichtlich ist, steht hinter jeder Anweisung ein Semikolon (Strichpunkt). Dieser wird in C dazu benützt, um eine Sequenz als abgeschlossen zu markieren. In anderen Sprachen ist es auch üblich, eine Zeile als eine Anweisung zu sehen. Durch dieses Abschlusszeichen ist es in C aber möglich, den gesamten Code eines Programmes (abgesehen von den Präprozessorbefehlen) in eine Zeile zu schreiben. Nicht sehr übersichtlich aber möglich.

    1. Definition von Variablen

Was C besonders auszeichnet, ist die Vielfalt an Datentypen. Standardtypen gibt es zwar nur einige wenige, jedoch können diese zu den komplexesten Konstrukten zusammengelegt werden. Variablen müssen in C vor allen anderen Operationen deklariert werden (diese Beschränkung existiert in C++ nicht mehr). Eine Deklaration in C sieht folgend aus:

[Schlüsselwörter] {Datentyp} [Schlüsselwörter] Variablenname [=Wert];

unsigned int iWert = 0;

In das Feld für "Datentyp" kann jeder in C vorhandene oder selbst definierte Datentyp geschrieben werden. Für "Variablenname" kann jede beliebige mit einem Buchstaben (A - Z, a - z, _) beginnende Zeichenfolge stehen, die jedoch nicht länger als 255 Zeichen sein darf. Zahlen dürfen nicht am Beginn des Variablennamens, sehr wohl jedoch in der Mitte oder am Ende stehen. Sonderzeichen dürfen (außer dem '_' ) überhaupt nicht vorkommen, da sie vom Compiler entweder als Operatoren identifiziert werden oder im Quellcode nicht erlaubt sind. Optional kann man der deklarierten Variable einen Wert zuweisen, der sich selbstverständlich im Verlauf des Programmes noch ändern kann. Die in eckigen Klammern ( [ ] ) stehenden "Schlüsselwörter" sind auch optional und können wie folgt aussehen:

      1. Schlüsselwörter

Schlüsselwörter (engl.: keywords) können bei der Deklaration von Variablen verschiedene Funktionen ausüben und den Standarddatentyp damit erheblich verändern. Einige der wichtigsten Schlüsselwörter:

unsigned - Steht vor dem Datentyp und legt fest, dass die folgende Variable kein Vorzeichen hat, das heißt, dass sie nur positive Werte annehmen kann.

signed - Das Gegenstück zu unsigned. Eine Variable, die mit diesem Schlüsselwort deklariert wurde, kann sowohl positive als auch negative Zahlen aufnehmen. Zu beachten ist hier jedoch, dass diese Variable dann nur noch die Hälfte ihrer bisherigen Kapazität an positiven Zahlen annehmen kann. Die andere Hälfte wird eben für die negativen Zahlen verwendet. (Zusatz: 0 gilt als die erste positive Zahl)

register - Weißt den Compiler an, dass die folgende Variable, falls möglich, in ein Prozessor-register geschrieben werden soll, um die kürzeste Zugriffszeit zu erreichen.

long - Eigentlich ein eigener Datentyp, der jedoch als Ersatz von long int zu sehen ist. Er weist den Compiler an, eine 32 Bit Variable zu erzeugen.

short - Mit short verhält es sich ähnlich wie mit long, nur dass der Compiler angewiesen wird eine 16 Bit Variable zu erzeugen.

static – Das Schlüsselwort static lässt eine Variable auch über einen Block hinaus am Leben.

volatile – Dem Compiler wird hierbei mitgeteilt, dass eine Variable auch außerhalb des Programmes verändert werden kann. Diese ist z.B. bei Interrupts notwendig.

      1. Zeiger

Der oft gehasste Begriff des Zeigers (engl. Pointer) ist in C so wichtig, wie das Amen im Gebet. Ein Pointer zeigt auf eine Variable im Speicher. Ein Pointer wird ähnlich deklariert, wie eine normale Variable, mit einigen Unterschieden:

{Schlüsselwörter} [Datentyp]* {Schlüsselwörter} Variablenname;

int *pnWert;

Einem Pointer sollte nicht direkt eine Adresse zugewiesen werden. Diese sollte von einer anderen Variable belegt werden. Ein Pointer, der mit einem bestimmten Variablentyp deklariert wurde, kann nur auf eine Variable des selben Typs zeigen. Dies ist wichtig, da der Typ des Zeigers die Länge der Variable angibt, auf die gezeigt wird. Ein Zeiger enthält in der Regel weniger Information als die Variable auf die er zeigt, was bei den später folgenden Funktionsaufrufen von Vorteil ist. Auch ist die Rückgabe von komplexen Datenstrukturen nur mit Hilfe ihrer Zeiger möglich. Abbildung 1 veranschaulicht den Begriff des Zeigers:

Abb. 1

RAM

Zeiger

Variable

Inhalt der Variable:

"10568" als dezimal

Inhalt des Zeigers:

"0xAEFF" als hex

Ein Zeiger muss nur so groß sein, wie die Adresse, auf die er zeigt. Die Adresse, auf die der Pointer hier zeigt, enthält eine Variable, deren Größe auch im MByte Bereich liegen könnte. Der Pointer bleibt trotzdem gleich groß sein, auch wenn er auf eine 4 Byte große Variable zeigen würde. Dies eröffnet nun die Möglichkeit, dass Variablen, die in verschiedenen Funktionen gebraucht werden, nicht aufwendig durch Kopieren des gesamten Inhalts an Unterfunktionen übergeben werden müssen, sondern lediglich durch Kopieren des Zeigers.

      1. Felder

Felder sind in C Aneinanderreihungen von Variablen gleichen Typs. Man unterscheidet Felder nach ihrer Dimension. Diese Dimensionen entsprechen auch den Dimensionen von geometrischen Objekten. Demnach entspricht eine normale Variable einem punktförmigen Objekt, ein eindimensionales Feld einer Linie, ein zweidimensionales Feld einer Fläche und ein dreidimensionales Feld einem Körper. Felder werden in C folgendermaßen deklariert:

{Schlüsselwörter} [Datentyp] Feldname[feste Anzahl]; <-- eine Dimension

{Schlüsselwörter} [Datentyp] Feldname[feste Anzahl][feste Anzahl]; <-- zwei

...

int anFeld[10][10];

Felder können von jedem beliebigen Datentyp erstellt werden. Die Größe des Feldes muss bereits zur Übersetzungszeit bekannt sein, da der Compiler hierfür Speicherplatz reservieren muss. Ist es aus programmtechnischen Gründen jedoch erforderlich, dass die Größe des Feldes erst zur Laufzeit feststehen darf, so kann man ein Feld dynamisch erzeugen. Dieser Punkt wird erst später genauer behandelt.

    1. Funktionsaufruf

In der Sprache C gibt es keine Unterschied zwischen einer Prozedur und einer Funktion, wie zum Beispiel in Basic. Jede Routine wird gleich behandelt. Grundsätzlich ist es in C zwingend erforderlich, dass Funktionen vor ihrem Aufruf zuerst angekündigt werden. Das heißt, dass der Kopf einer jeden Funktion vor besagtem Aufruf stehen muss. Danach folgt der Programmeinstiegspunkt main und danach die Definition der Unterprogramme. Prinzipiell sieht eine Funktion in C folgend aus:

{Schlüsselwörter} [Datentyp] Funktionsname( {Parameterliste} )

int Funktion(int x1, int x2)

Auch bei Funktionen kann das Feld "Datentyp" jeden beliebigen Datentyp annehmen. Hier ist jedoch darauf zu achten, dass bei komplexen, eigenen Datentypen ein Zeiger zurückgegeben werden muss.

Die Parameterliste kann beliebig viele Parameter enthalten, die syntaktisch gleich zu schreiben sind, wie Variablendeklarationen. Die Parameter in der Liste müssen durch Beistriche getrennt werden und können ebenfalls jeden Datentyp darstellen. Bei der Übergabe von Parametern gelten folgende Richtlinien:

  1. Zwischen den beiden runden Klammern können beliebig viele Parameter stehen, die durch einen Beistrich getrennt werden müssen.

  2. Zusätzlich zum Namen der Variablen muss auch deren Typ angegeben werden.

  3. Es können Zeiger auf Variablen oder auch Variablen selbst übergeben werden.

  4. Es ist möglich, die Parameterliste variabel zu gestalten (Ellipse ...)

Wird an die Funktion ein Feld übergeben, so geschieht dies über einen Zeiger. Dieser zeigt auf das erste Element des Feldes.

Soll die aufgerufene Funktion ein Resultat zurückliefern, so ist die Art, wie die Variable zurückgeliefert wird, abhängig von deren Typ. Wird ein Feld zurückgeliefert, muss ein Zeiger auf das Feld zurückgeliefert werden. Bei normalen Variablen kann der Wert oder der Zeiger zurückgeliefert werden. Weitere Information: siehe 4.6 

    1. Auflösung

Die Auflösung des Quellcodes durch den Compiler erfolgt von rechts nach links und von innen nach außen. Wie stark eine C - Sequenz verschachtelt sein darf, ist von der Mächtigkeit des Compilers abhängig, der den Code übersetzt. Ein sehr großer Vorteil von C ist die Fähigkeit, sehr komplexe Konstrukte erzeugen zu können, was allerdings oftmals sehr zu Lasten der Lesbarkeit geht. So können in einer Sequenz Zuweisungen, Abfragen und Funktionsaufrufe auftreten. Um hier die Übersicht und vor allem die Richtigkeit zu gewährleisten, besitzen die einzelnen Operatoren in C eine Wertigkeit. Ähnlich wie die "Klammer-vor-Punkt-vor-Strich" Regel in der Mathematik, haben auch hier einige Operatoren eine höhere Priorität als andere.

Die Prioritäten können aus der Tabelle entnommen werden:

Operatoren
Bezeichnung
 
Operatoren
Bezeichnung
Operatoren
Erster Rang
 
Relational
Siebter Rang
( )
Funktionsaufruf
 
<
Kleiner
[ ]
Array-Subscript
 
<=
Kleiner Gleich
->
Indirekte Komponentenauswahl (nur C++)
 
>
Größer
::
Gültigkeitsbereichszugriff und -auflösung (nur C++)
 
>=
Größer Gleich
.
Direkte Komponentenauswahl (nur C++)
 
Gleichheit
Achter Rang
Unäre
Zweiter Rang
 
==
Gleich
!
Logische Negation (NOT)
 
!=
Ungleich
~
Bitweises Komplement
 
UND
Neunter Rang
+
Unäres Plus
 
&
Binäres Und
-
Unäres Minus
 
EXOR
Zehnter Rang
++
Prä- oder Postinkrementierung
 
^
Bitweises Exklusiv-Oder
- -
Prä- oder Postdekrementierung
 
Oder
Elfter Rang
&
Adressermittlung
 
|
Bitweises Oder
*
Umleitung
 
Und
Zwölfter Rang
sizeof
Größe des Operanden in Bytes
 
&&
Logisches Und
new
Dynamische Speicherzuweisung (nur C++)
 
Oder
Dreizehnter Rand
Delete
Dynamische Speicherfreigabe (nur C++)
 
||
Logisches Oder
Multiplikative
Dritter Rang
 
Bedingung
Vierzehnter Rang
*
Multiplikation
 
?:
Ternärer Operator
/
Division
 
Zuweisung
Fünfzehnter Rang
%
Modulo
 
=
Einfache Zuweisung
Klassen
Vierter Rang
 
*=
Produkt Zuweisen
.*
Dereferenzierung (nur C++)
 
/=
Quotient Zuweisen
->*
Dereferenzierung (nur C++)
 
%=