[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: C oder C++ Kurs auf Disk
- Subject: Re: C oder C++ Kurs auf Disk
- From: Eberhard Hahn <eberhard.hahn_bEi_zdv.uni-tuebingen.de>
- Date: Tue, 20 Oct 1998 15:33:37 +0200 (MEST)
Hallo Hasan, Wulf und alle C-ler!
On 19 Oct 1998, Hasan Karahasan, DJ2xt wrote:
> Ich habe gelesen, dass gerade die systemeigenen kr-Compiler bei Hpux und
> Sun/OS alles andere als ansi-tauglich sind. Sie wuerden wohl nicht einmal
> mit Prototypen umgehen koennen. Stimmt das?
Quod erat demonstrandum. Es gibt also auch bei C etliche "Dialekte", wie
Wulf bereits in seiner Antwort ausfuehrte. Viele Compiler lassen sich per
Option auf die verschiedenen Sprachvarianten umstellen, aber gerade als
Anfaenger wird man diese Optionen nicht benutzen, sondern den jeweiligen
Default verwenden, und eben der kann von Hersteller zu Hersteller oder
sogar zwischen den Betriebssystemversionen variieren. Wenn wir nun schon
den Einsteigern das Buch von Kernighan und Ritchie empfohlen haben,
muessen wir halt fairerweise dazusagen, dass es nicht Ansi-C vermittelt,
welches inzwischen wohl am ehesten als Standard angesehen werden kann. Ich
weiss nicht, ob es inzwischen eine Neuauflage jenes Buches gibt, in der
Ansi-C beschrieben wird. In Blindenschrift ist so etwas jedenfalls nicht
erhaeltlich.
Noch kurz zu den Prototypen: Unter einem "Prototyp" versteht man in C eine
aufs Notwendigste reduzierte Funktionsdeklaration. Aber was "notwendig"
ist, variiert eben auch innerhalb der einzelnen C-Dialekte. Wenn der
Compiler in einem Programm auf den Aufruf einer Funktion stoesst, ueber
die er noch nichts weiss, hat er nach der urspruenglichen Lesart den Typ
int (steht fuer "integer" = "ganzzahlig") angenommen. Auf die
Ueberpruefung von Anzahl und Typen der uebergebenen Parameter hat man bei
C bewusst verzichtet, um dem Programmierer die Moeglichkeit zum Tricksen
nicht zu verbauen. So kam man auch mit Funktionen wie printf, die beliebig
viele Parameter mit beliebigen Typen verkraften sollen, nicht in logische
Schwierigkeiten. Fazit: Prototypen waren optional (bei Typ int konnten sie
fehlen) und wurden nur mit leerer Parameterliste akzeptiert (weil die
Information darin ja doch nicht interessierte). - Dann hat man aber doch
gemerkt, dass der lockere Umgang mit der Parameteruebergabe nicht so das
Gelbe vom Ei ist. Ansi-C sieht deshalb Prototypen vor, die eine
Beschreibung der formalen Parameter enthalten und dem Compiler zumindest
die Moeglichkeit zur Ueberpruefung der aktuellen Parameter geben. In C++
schliesslich werden Prototypen geradezu verlangt. Hier geht man sogar
einen wesentlichen Schritt weiter, indem man mehrere Funktionen gleichen
Namens zulaesst, wenn sie sich nur in ihren Argumentlisten unterscheiden.
- Na, liebe Anfaenger, doch lieber Pascal, wo es diesen ganzen Wirrwarr
gar nicht gibt?
> So kann man unter Dos folgendes voellig untypische Programm uebersetzen.
Vielen Dank, Hasan, fuer das huebsche Programmbeispiel! Allerdings:
> // Diese Funktion wird aufgerufen, wenn die programmierte Zeit des
> // Timers abgelaufen ist und dieser das Signal SIGALRM ausloest.
Da hast Du ja Glueck, wenn Dein C-Compiler diese Art von Kommentaren
akzeptiert, denn "//" ist eine C++-Konvention. Aehnlches kann einem mit
dem Schluesselwort const passieren: Eigentlich gehoert es zu C++, aber
viele C-Compiler koennen es auch (ich meine, es ist auch in den
Ansi-Standard aufgenommen worden). Bliebe die Frage, warum man dann nicht
nur noch C++-Compiler herstellt, wo doch C eine echte Untermenge von C++
ist. Es waere einem ja dann frei gestellt, welche Features von C++ man
benutzen will. Nur leider stimmt das mit der "echten Teilmenge" halt auch
nicht so ganz...
Lassen wir's gut sein. Das naechstemal schreibe ich etwas fuer weniger
tief Eingeweihte.
Viele Gruesse
Eberhard