C-Sprachbeschreibung
Grundlagen
Ein C-Programm besteht aus einzelnen »Bausteinen«, den Funktionen, die sich gegenseitig aufrufen.
/* Head.c: Das Programm gibt den Anfang einer *
* Textdatei auf die Standardausgabe aus. * Kommentar
* Aufruf: Head Dateiname */
#include <stdio.h> Präprozessordirektiven
#define LINES 22
void showPage( FILE *); // Prototyp Deklarationen
int main( int argc, char **argv) Die Funktion main()
{
FILE *fp; int exit_code = 0;
if( arge != 2 )
{
fprintf(stderr, "Aufruf: Head Dateiname\n");
exit_code = 1;
}
else if( (fp = fopen(argv[1], "r")) == NULL )
{
fprintf(stderr, "Fehler beim Öffnen der Datei!\n");
exit_code = 2;
}
else
{
showPage(fp);
fclose(fp);
}
return exit_code;
}
void showPage( FILE *fp) // Eine Bildschirmseite
{ //ausgeben.
int count = 0; Weitere Funktionen
char line[81];
while(count < LINES && fgets(line, 81, fp) != NULL)
{
fputs(line, stdout);
++count;
}
}
Jede Funktion löst eine bestimmte Aufgabe. Sie ist entweder selbst erstellt oder eine fertige Routine aus der Standardbibliothek. Die Funktion main() hat eine besondere Rolle: Sie bildet das steuernde Hauptprogramm. Jede andere Funktion entspricht einem Unterprogramm.
Struktur eines C-Programms
Das obige Beispiel zeigt, wie ein C-Programm strukturiert ist. Das Programm besteht aus den Funktionen main() und showPage(). Es gibt den Anfang einer Textdatei aus, deren Name beim Starten des Programms in der Kommandozeile angegeben werden muss.
Die Anweisungen, aus denen die Funktionen bestehen, bilden zusammen mit den notwendigen Deklarationen und Präprozessordirektiven den Quellcode eines C-Programms. Dieser wird bei kleineren Programmen in eine Quelldatei geschrieben.
Größere C-Programme bestehen aus mehreren Quelldateien, die getrennt bearbeitet und übersetzt werden können. Dabei werden in einer Quelldatei die Funktionen zusammengefasst, die auch logisch eine Einheit bilden, wie etwa die Funktionen für die Bildschirmausgabe. Informationen, die in mehreren Quelldateien erforderlich sind, wie z. B. Deklarationen, werden in Header-Dateien gestellt. Diese können mit der #include-Direktive in eine Quelldatei kopiert werden.
Quelldateien haben die Endung .c, Header-Dateien die Endung .h. Eine Quelldatei zusammen mit den darin inkludierten Header-Dateien wird Übersetzungseinheit genannt.
Die Reihenfolge, in der Funktionen definiert werden, ist nicht vorgeschrieben. Zum Beispiel könnte die Funktion showPage() auch vor der Funktion main() stehen. Eine Funktion darf jedoch nicht innerhalb einer anderen Funktion definiert werden.
Zur Gestaltung der Quelldatei: Generell gilt, dass der Compiler jede Quelldatei sequenziell bearbeitet und den Inhalt in »Tokens« (kleinste Bestandteile) zerlegt, wie zum Beispiel Funktionsnamen und Operatoren. Tokens können durch beliebig viele Zwischenraumzeichen getrennt werden, also durch Leer-, Tabulator- oder Newline-Zeichen. Es kommt nur auf die Reihenfolge an und nicht auf ein bestimmtes Layout, wie etwa die Aufteilung in Zeilen und Spalten. Eine Ausnahme bilden die Präprozessordirektiven, also die Befehle, die der Präprozessor vor der Kompilierung ausführen soll. Sie begi...