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.
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. 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; } Ciao, Micha.