8. Anatomie unseres Programmes

#include <stdio.h>

(“Hash include”) Sagt dem Compiler, eine Datei stdio.h zu lesen. Im Fall von stdio.h (“Standard I/O”) wird erklärt, welche Argumente die Funktionen zur Ein- und Ausgabe nehmen (die ist das Äquivalent der Python-Signaturen, die dem Compiler hier explizit bekannt sein müssen) und verschiedene Konstanten definiert. Hier für printf nötig.

Es sei hier ausdrücklich vor dem Irrtum gewarnt, dieses include sei irgendwie enger mit Pythons import verwandt. Include-Dateien enthalten anders als Python-Module in der Regel keinen (oder nur sehr wenig) Code. Sie sind allein dafür da, den Compiler mit verschiedenen Funktionen, Typen und anderen Kleinigkeiten bekannt zu machen. Definiert sind diese Funktionen woanders. Im Fall von stdio.h ist das die Standardbibliothek, die deshalb Standard ist, weil der C-Compiler “von selbst” in ihr nachsieht, so dass wir hier keine weiteren Beschwörungen brauchen. Im Fall anderer Module (die in C in Bibliotheken organisiert sein können) ist das anders, ein include reicht nicht. Mehr dazu später, wenn wir selbst C-Module basteln. Schon jetzt aber der Hinweis, dass, auch wenn der include-Mechanismus dazu verführen mag, einfach kompletten Quelltext (mit Funktionsdefinitionen) einzubinden, so eine Vorgehensweise ausschließlich Ärger bringt und deshalb zu unterlassen ist.

int main(void)

Definiert eine Funktion main, die eine ganze Zahl zurückgibt (int) und kein Argument nimmt (void). C definiert, dass die Funktion main aufgerufen wird, wenn das Programm startet. Hier sehen wir zum ersten Mal, dass anders als in Python in C Variablen (und nicht Werte) Typen haben. Insbesondere gibt eine bestimmte Funktion immer nur Werte eines bestimmten Typs zurück, anders als in Python, wo eine Funktion etwa sowohl None als auch eine ganze Zahl zurückgeben kann.

{

In C werden Blöcke mit geschweiften Klammern abgeteilt, sie ersetzen sozusagen die Einrückung. Man sollte in C dennoch Blöcke einrücken, weil Menschen mehr Schwierigkeiten als Computer haben, aus den Klammern die Struktur des Programms zu rekonstruieren. Die korrekte Einrückung von C-Programmen ist Gegenstand heißer Debatten der Fachwelt.

Wer ein Linux-System mit installierten Kernelquellen hat, kann sich die Datei /usr/src/linux/Documentation/CodingStyle ansehen. Ich stimme Linus’ Ansichten recht weitgehend zu.

printf("Hello World\n");

Die Funktion printf gibt ihre Argumente auf den Bildschirm aus, sie entspricht etwa

def printf(fmt, *args):
  print fmt%args

in Python. Der Strichpunkt schließt die Anweisung ab und hat in etwa in Funktion des Zeilenvorschubs in Python.

return 0;

Das kennen wir aus Python, neu ist wieder der Strichpunkt. Zeilenenden bedeuten für C fast nichts.

}

Diese geschweifte Klammer schließt den Block (nämlich den Funktionskörper).


Markus Demleitner

Copyright Notice