Vorwort
Wenn Sie z. B. in Wikipedia nach der Programmiersprache C suchen, werden Sie sich wundern, wie alt diese schon ist, und dort z. B. erfahren, dass C im Jahr 1970 in den Bell Laboratories entwickelt wurde. Damit ist C auch nicht viel jünger als das früher einmal sehr populäre BASIC, das 1964 entwickelt wurde, oder das ebenfalls 1970 entwickelte Pascal, dessen Compiler sogar sehr maschinennahen Code erzeugen. Warum also C lernen, wenn es so viele verschiedene Programmiersprachen gibt, und mit Java sogar eine moderne, internettaugliche, plattformunabhängige Programmierumgebung?
Die Antwort ist, dass Sie auch mit C eine sehr universelle und sogar plattformunabhängige Programmiersprache erlernen, die für fast jedes erhältliche Computersystem vorhanden ist. C ist außerdem sehr ressourcensparend, und die damit erstellten Programme sind sehr schnell in der Ausführung. Ebenso einfach ist es, in C geschriebene Programme jederzeit auf verschiedene Systeme zu portieren, wenn man sich an den genormten Standard hält. Dies gilt nicht nur für PCs, sondern auch für viele Kleincomputer oder Mikrocontroller. Wenn Sie z. B. einen Arduino oder den inzwischen sehr populären Raspberry Pi besitzen, werden Sie sehr davon profitieren, C zu können. C ist also populärer denn je, und sogar Java lehnt sich an das C-Derivat C++ an. Wenn Sie also C können, wird Ihnen der Einstieg in C++ und Java nicht schwerfallen.
Nun noch ein kleiner Hinweis zum C-Standard: Auch wenn es sich bei diesem Buch nicht um eine technische Spezifikation zu C handelt, sollten Sie sich immer der Wichtigkeit des Standards bewusst sein, wenn Sie wirklich portable Programme schreiben wollen. Im Internet finden Sie eine Menge Informationen zum C-Standard.
Die andere Seite der Medaille ist natürlich, dass wenn Sie C-Programme schreiben und die Regeln des Sprachstandards nicht beachten, Sie ein undefiniertes Verhalten (undefined behaviour) provozieren, das zu einem nicht portablen Programm führen kann. Dies ist dann auch die häufigste Quelle für schwer auffindbare Fehler. Wir empfehlen Ihnen also, dass Sie sich möglichst an den Standard halten, denn dann sind Sie auf der sicheren Seite.
Nun möchten wir noch einige Dinge zum Ziel dieses Buches sagen, damit Sie nicht zu viel erwarten und sich am Ende ärgern, dass Sie das falsche Buch gekauft haben. Ziel dieses Buches ist es nicht, Ihnen eine umfassende Referenz zu bieten, sondern Ziel dieses Buches ist es, Ihnen einen grundlegenden Einstieg in die Programmiersprache C zu vermitteln. Wir werden Ihnen also alles schildern, was in C wichtig ist, nicht mehr und nicht weniger. Obgleich C im Verhältnis zu anderen Programmiersprachen einen geringen Sprachumfang hat, werden Sie sehen, dass sich damit trotzdem professionelle und plattformunabhängige Programme entwickeln lassen. Mit diesem Buch werden Sie natürlich nicht gleich zum Profi und können sofort professionelle Anwendungen in einem großen Team entwickeln (nicht zu vergessen, dass Sie hierzu natürlich auch Soft Skills benötigen, die Sie in keinem Programmierbuch erlernen). Sie erlernen jedoch die notwendigen Grundlagen, auf denen Sie aufbauen können, wenn Sie später die professionelle Anwendungsentwicklung betreiben wollen – ganz gleich, ob Sie sich mit GUI-Anwendungen, Backend-Bibliotheken, Embedded Systems oder etwas anderem beschäftigen.
Natürlich ist es auch nicht möglich, in einem kleinen Taschenbuch wie diesem auf alle Regeln einzugehen; dies würde wohl gerade auf einen Einsteiger in die Sprache eher abschreckend wirken. Es könnte aber hilfreich sein, wenn Sie sich parallel zu diesem Buch mit dem aktuellen Standard von C (derzeit C18) befassen.
Alle Beispiele in diesem Buch lassen sich mit jedem moderneren C-Compiler verwenden. Wenn Sie noch einen älteren Compiler besitzen, der beispielsweise den C89-Standard erfüllt, und im entsprechenden Abschnitt einen Hinweis finden, dass diese Funktionalität erst seit C99 oder gar C11 vorhanden ist, können Sie das Beispiel mit Ihrem älteren Compiler logischerweise nicht ausführen. In diesem Fall müssen Sie einige Anpassungen vornehmen, auf die wir dann gesondert hinweisen.
Auch ist dieses Buch keine Referenz zur Standardbibliothek und den vielen Funktionen von C. Eine solche Referenz würde weitere 300 Buchseiten füllen. Es gibt jedoch viele gute Online-Referenzen wie etwa http://en.cppreference.com/w/c oder http://www.cplusplus.com/reference/clibrary/. Außerdem enthalten die meisten Compiler eine Hilfe mit einer C-Referenz – und nicht zu vergessen die Manpages, die mit dem Unix-Kommando 'man' auf den meisten Linux- und Unix-Systemen verfügbar sind. Die wichtigste Referenz ist wohl immer noch die PDF-Datei des Committee Drafts zum aktuellen C-Standard unter http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf. Auch wenn Sie einen Blick auf den 700-seitigen, älteren C11-Standard (ISO/IEC 9899:2011) werfen (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf ), dürfte schnell klar sein, dass nach der Lektüre dieser Einführung noch vieles übrigbleibt.
Mit diesem Hintergrundwissen und dem nötigen Respekt davor, eine wirklich universelle Sprache zu erlernen, können Sie sich nun an das Durcharbeiten dieses Buchs machen. Wenn Sie danach immer noch Interesse an C haben, können Sie sich das ebenfalls bei Rheinwerk erschienene Standardwerk »C von A bis Z« besorgen. Dort steht auf über 1.200 Seiten fast alles, was Sie über C wissen müssen. Wir raten Ihnen jedoch: Lassen Sie es langsam angehen und besorgen Sie sich ein so umfassendes Werk wie »C von A bis Z« oder ein gleichwertiges Buch über C++ später. So ersparen Sie sich viel Frust, weil Sie sich nicht von Anfang an zu viel vorgenommen haben. Wenn Sie gleich anfangen, komplexe GUI-Anwendungen zu schreiben, werden Sie sicherlich auf den Bauch fallen. Nicht zuletzt zählt natürlich auch der Spaß, den Sie an der Sache haben, denn ganz ohne Spaß geht es nicht. Deshalb wünschen wir Ihnen an dieser Stelle auch vor allem viel Spaß mit C und diesem Buch.
René Krooß
Jürgen Wolf