Am Don, 2003-02-27 um 15.48 schrieb Bernhard Walle:
Hallo,
On Thu, 27 Feb 2003 at 15:42 (+0100), Michael Matz wrote:
On Thu, 27 Feb 2003, Bernhard Walle wrote:
Für C kann ich nur hoffen, dass ein zukünftiger Standard dies übernimmt, so wie C einst die Prototypen von C++ übernahm.
ACK. Was meinst Du eigentlich mit den Prototypen?
Prototypes sind Funktionsdeklarationen, die auch die Typen der Argumente deklarieren. Sie koennen im Kontext einer Funktionsdefinition, oder als simple Deklaration auftreten.
Schon klar.
Und nein, Prototypen wurden nicht von C++ uebernommen, sondern sind schon in ANSI C90.
Ich verstehe jetzt nicht was in C90 aufgenommen wurde. Wie lief das frueher in C ohne Prototypen?
Typischerweise so: func(int, int); func() int a; int b; { int c; /* tu was */ return c; }
Musste die Funktion vor der Verwendung definiert werden (denn ohne Prototypen gibt es ja keine Deklaration ohne Definition) oder konnte sie `einfach so' verwendet werden, d. h. ohne eine Ueberpruefung der Argumente auf Anzahl und Typ. Letzteres waere ja, naja, nicht so toll ;). Beides, nicht umsonst gab es Leute, die bei C von "Macro-Assembler" sprachen.
Warum implementieren die gcc'ler eigentlich nicht das mit dem Weglassen auch fuer C. Ich meine, das __attribute__((unused)) ist ja auch inkompatibel, dann koennte man wenigstens etwas sinnvolles inkompatibles (immerhin viel kuerzer) machen ...
Zweischneidig. Auf den ersten Blick ist dies eine vernuenftige Idee, nichtdestotrotz aber eine Abweichung vom Standard. Und zwar wuerde es eine _weitere_ sein.
Wie machen das eigentlich andere Compilerbauer (Microsoft/Intel/ Borland)?
Die auch beim Gcc verwendete Konvention ist ziemlich weit verbreitet. Willst Du es portabel, dann ignoriere die Warnungen einfach oder schalte die Compileroption ab, die für die Warnung sorgt :-) Es sind Warnungen und keine die Funktion beeinträchtigenden Fehler. Sie sind als Hilfe beim Entwickeln und bei der Fehlersuche gedacht. Wenn Du unter gcc arbeitest, kannst Du die GCC-Konventionen verwenden um die Warnungen los zu werden, u.U. wird ein anderer Compiler dann wiederum Warnungen liefern. __attribute__() würde ich nicht verwenden, da es nicht ganz einfach ist __attribute__() mit Nicht-GCC-Compilern selektiv zu deaktivieren/aktivieren.
Warum kann man sich nicht (ohne Standard) auf ein gemeinsames Vorgehen einigen? Es ist wie mit allen Standards ...
Es dauert, Kommissionen werden gegründet, jeder hat etwas, jeder glaubt besser zu sein als der andere oder hat etwas zu verbergen, jeder hat was proprietäres, das er auf keinen Fall aufgeben möchte, die anderen wollen es auf keinen Fall übernehmen, da sie es ja nicht haben usw. usf. ... Ralf