Am Don, 2003-02-27 um 17.38 schrieb Michael Matz:
Hi,
On 27 Feb 2003, Ralf Corsepius wrote:
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);
Das ist schon ein Prototyp, also nicht im Uralt-C vorhanden. Um bloss ne Funktion zu deklarieren, ohne zu definieren, so: func ();
Das ist uebrigens das, was die ueblichen PARAMS() macros machen. Dies: int func PARAMS((int a, int b)); expandiert je nachdem, was der Kompiler so kann zu: int func (int a, int b); oder int func ();
func() int a; int b;
Und wenn so, dann muss es "func(a,b)" heissen. Ja, ja, ... Du hast ja recht ... :-)
Wie machen das eigentlich andere Compilerbauer (Microsoft/Intel/ Borland)?
Die auch beim Gcc verwendete Konvention ist ziemlich weit verbreitet.
??? Meinst du den C++-Teil? Dann ist es kein Wunder, da der Standard dies verlangt. IIRC, kannte selbst der Borland TurboC 2 von anno 89 (??) sie schon ;-)
In C gibt's keine solche Konvention, nur die __attributes__.
wiederum Warnungen liefern. __attribute__() würde ich nicht verwenden, da es nicht ganz einfach ist __attribute__() mit Nicht-GCC-Compilern selektiv zu deaktivieren/aktivieren.
Ach was. Ich sag bloss CPP. Maechtiger, guter, problemloesender CPP. Halleluja, CPP ;-) :
#ifdef COMPILER_IST_MIST_CLOSED_SOURCE_DRECK #define __ARG_UNUSED #else #define __ARG_UNUSED __attribute__((unused)) #endif
int f(int a, int b __ARG_UNUSED) { return a; }
Damit das funktioniert, musst Du es erst einmal verwenden. Mit einem einfachen __attribute__((unused)) wird's problematisch, sofern ein Nicht-GCC __attribute__() mit anderen Argumenten akzeptiert. Ralf