Ein Überblick: C

In diesem Artikel sollen die Besonderheiten der Programmiersprache C aufgezeigt werden. Dazu implementierte ich einen Rechner. In diesem Programm konnten Pointer, Pointer auf Funktionen und Structs untergebracht werden.

Das Programm könnte leichter und übersichtlicher gestaltet sein. Gewiss muss ein simpler Rechner nicht so kompliziert sein, allerdings soll der vorliegende Quelltext einige Besonderheiten der Programmiersprache C hervorheben. Außerdem wurde nicht darauf geachtet, Ausnahmen oder Eingabefehler zu überprüfen. Dieses Programm dient der reinen Demonstration.

<br />
#include&lt;stdio.h&gt;</p>
<p>struct Rechnung {<br />
    double zahl1;<br />
    double zahl2;<br />
    int operation; /* 0, 1, 2, 3 */<br />
    double ergebnis;<br />
};</p>
<p>// Diese Funktionen dienen der Berechnung<br />
void addieren(struct Rechnung *r) {<br />
    r-&gt;ergebnis = r-&gt;zahl1 + r-&gt;zahl2;<br />
}</p>
<p>void subtrahieren(struct Rechnung *r) {<br />
    r-&gt;ergebnis = r-&gt;zahl1 - r-&gt;zahl2;<br />
}</p>
<p>void multiplizieren(struct Rechnung *r) {<br />
    r-&gt;ergebnis = r-&gt;zahl1 * r-&gt;zahl2;<br />
}</p>
<p>void dividieren(struct Rechnung *r) {<br />
    r-&gt;ergebnis = r-&gt;zahl1 / r-&gt;zahl2;<br />
}</p>
<p>// MAIN<br />
int main(void) {</p>
<p>    // Das Rechnungsstruct definieren<br />
    // (ohne explizite Anfangswertzuweisung).<br />
    struct Rechnung rechnung;</p>
<p>    // Pointer auf die Funktionen erzeugen.<br />
    int (*rechenarten[4])(struct Rechnung *) = {&amp;addieren, &amp;subtrahieren, &amp;multiplizieren, &amp;dividieren};</p>
<p>    printf(&quot;Zahl eingeben: &quot;);<br />
    scanf(&quot;%lf&quot;, &amp;rechnung.zahl1);</p>
<p>    printf(&quot;Rechenart eingeben (0: Addition, 1: Subtraktion, 2: Multiplikation, 3: Division): &quot;);<br />
    scanf(&quot;%d&quot;, &amp;rechnung.operation);</p>
<p>    printf(&quot;Zahl eingeben: &quot;);<br />
    scanf(&quot;%lf&quot;, &amp;rechnung.zahl2);</p>
<p>    // Die Rechnung durchführen<br />
    (*rechenarten[rechnung.operation])(&amp;rechnung);</p>
<p>    printf(&quot;Ergebnis: %lf&quot;, rechnung.ergebnis);</p>
<p>    return(0);<br />
}<br />

Zuerst wird ein Struct „Rechnung“ definiert. Mittels diesem werden alle Daten zur Berechnung gespeichert. Anschließend werden die Funktionen zur Berechnung definiert. In der Main-Funktion, welche in jedem (!) C-Programm vorhanden sein muss (diese ist der Einstiegspunkt), wird der Benutzer aufgefordert, einige Daten zur Berechnung einzugeben.

Die Funktionen zur Berechnung erwarten einen Pointer (Zeiger) auf das Rechnungsstruct. Auf diese Weise kann Speicher gespart werden. Außerdem kann eine Funktion so auf eine Variable (struct Rechnung rechnung) der Main zugreifen (lesen & schreiben). Zeiger ähneln den Referenzdatentypen (Objekten) der Sprache Java.

Jedoch geschieht die eigentliche Magie in Zeile 38. Dort werden die Speicheradressen1 der einzelnen Funktionen an einen Zeiger übergeben. Dies kann mit einem &func_name erreicht werden. Die zweite Klammer (links des Gleichheitszeichens) dient der Spezifizierung der Parameter. In Zeile 50 sieht man diesen „Pointer auf Funktionen“ in Aktion. Mit der typischen Arrayschreibweise kann eine Funktion ausgewählt und mit entsprechendem Parameter aufgerufen werden.

Dieser Pointer, welcher auf mehrere Funktionen zeigen kann, ist eine tolle Sache. In einer Sprache wie Java müsste erst eine switch-case-Anweisung gebastelt werden und dies kann sehr umständlich und lästig sein, wenn man 10 oder 20 Funktionen in Abhängigkeit eines Integers aufrufen möchte.

Weiter möchte ich an dieser Stelle nicht auf den obenstehenden Quelltext eingehen. Ich belasse es bei diesem kurzen Überblick. Vielleicht konnte ich mit diesem dein Interesse für diese Programmiersprache wecken. Ich lerne sie im Rahmen meines Studiums und bin doch positiv überrascht. Darüber hinaus verbergen sich noch einige interessante Sachverhalte in der Programmiersprache (z.B. die Hardwarenähe, Listen, Unions usw…).


1: Die Adresse der Speicherzelle (genauer der ersten Speicherzelle).

Was denkst du über diesen Post?
  • Gut (1)
  • Hilfreich (0)
  • Nicht gut (0)
  • Lustig 😀 (0)

von | Kategorie: Programmierung
Schlagwörter: //

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

+ 14 = 22