10.7. Guter Programmierstil
- Verwenden Sie, wenn irgendwie möglich, immer lokale Variablen. Sollen diese nach der Beendigung einer Funktion ihren Wert behalten, dann können Sie dies durch das Schlüsselwort static erreichen.
- Dieser Hinweis ergibt sich logisch aus dem vorigen: Vermeiden Sie die Verwendung globaler Variablen! Falls eine solche nicht in anderen Quelldateien eines Projekts benötigt wird, sollten Sie auf alle Fälle ihren Gültigkeitsbereich mit static eingrenzen!
- Definieren Sie alle globalen Variablen auf einmal gleich vor main(). Zwar ist es erlaubt, diese überall im Programm — spätestens jedoch vor ihrer ersten Verwendung — zu definieren, dies macht das Programm aber schwerer lesbar.
- Sorgen Sie bei der Wahl von Variablennamen dafür, daß die Variablen eines übergeordneten Geltungsbereichs nicht durch Namensgleichheit unzugänglich gemacht werden (siehe die Beispiele scope1.c und global.c). Eine solche Vorgehensweise beugt Verwechslungen vor.
- Vermeiden Sie die Erstellung eigener Funktionen, falls für den bestimmten Zweck eine ANSI-konforme Bibliotheksfunktion zur Verfügung steht. Dies reduziert die Entwicklungszeit eines Programms und erhöht zudem dessen Portierbarkeit.
- Jede Funktion sollte eine klar definierte Aufgabe erfüllen. Der Funktionsname sollte unmißverständlich Aufschluß über den Zweck einer Funktion geben. Dies erhöht die Wiederverwendbarkeit von Programmcode.
- Als Faustregel für die Länge einer Funktion kann gelten, daß sie nicht mehr als eine Seite umfassen sollte. Überlange Funktionen oder endlose Parameterlisten deuten darauf hin, daß ihre Aufgaben nicht klar eingegrenzt sind. Sie sollten daher besser in mehrere kleine Funktionen zerlegt werden.
- Deklarieren Sie alle benutzten Funktionen mit Hilfe von Prototypen. Wenn Sie Bibliotheksfunktionen in Anspruch nehmen, dann sollten Sie mit einer #include-Anweisung immer die dazugehörige Header-Datei einfügen. Sie enthält den Prototypen dieser Funktion.
- Wenn Sie Arrays oder Pointer als Argumente an eine Funktion übergeben und nicht wollen, daß die aufgerufene Funktion die Originalwerte verändert, dann können Sie dies mit dem Schlüsselwort const erreichen. Bei Projekten, an denen mehrere Programmierer beteiligt sind, ist die Verantwortung einseitig verteilt: Es liegt dort am Autor der aufrufenden Funktion, was er mit den Argument-Variablen der aufrufenden Funktion macht.
- Obwohl es erlaubt ist, auf die Angabe des Rückgabewerts zu verzichten — standardmäßig sind dann alle Funktionen einfach vom Typ int — , sollten Sie diesen bei Definitionen und Deklarationen immer anführen.
- Falls Sie den Rückgabewert einer Funktion nicht benutzen, dann können Sie dies als C-Purist dadurch kenntlich machen, daß Sie ein type cast vornehmen. Wenn Sie beispielsweise den Rückgabewert von printf() (Anzahl der gedruckten Zeichen) nicht verwenden wollen, dann können Sie den Aufruf so gestalten: (void) printf("Hello world\n").