void funktionsparameter
-
Als ich im letzten thread im C++ Forum gelesen hab, dass
void func(void); != void func();
in eine ANSI-C ist, hab ich mich gefragt, was denn hier genau der Unterschied ist, wenn es einen gibt. Ist das ohne void in der Parameterliste überhaupt standardkonform?
mfg
Jürgen
-
int foo();
ist eine K&R-Style Funktionsdeklaration, kein Prototyp (falls dir das nichts sagt: Kernighan und Ritchie sind die Erfinder von C, K&R meint also die Urversion, vor ANSI-C). foo kann beliebig viele Parameter annehmen. Ach so, das ist immer noch standardkonform, wenn auch veraltet.
int foo(int a);
ist ein ANSI-C Prototyp. Die Funktion nimmt genau ein int-Argument an. Leider kollidiert die Prototypen-Idee bei leerer Parameterliste mit der K&R-Style-Deklaration von oben. Es wurde ein recht häßlicher Workaround gefunden:
int foo(void);
[Übrigens, in C++ gibts keine K&R-Deklarationen mehr, dort ist das void in den Klammern also überflüssig, weil die leeren Klammern schon für 0 Parameter stehen.]
-
Bashar schrieb:
int foo();
foo kann beliebig viele Parameter annehmen. Ach so, das ist immer noch standardkonform, wenn auch veraltet.
beliebig viele parameter sieht doch so aus
int foo(...);
-
ach, gerade hab ich mir das schon hier gestellt.
Was bringt es, einer Funktion mit '()', mehrere Parameter geben zu können?
-
DrGreenthumb schrieb:
ach, gerade hab ich mir das schon hier gestellt.
Was bringt es, einer Funktion mit '()', mehrere Parameter geben zu können?
Um auf beliebig großen Mengen zu arbeiten? z.B. ne add-Funktion, der du beliebig viele Operanden übergeben kannst.
-
mengen... operanden...
man hat in der Funktion ja überhaupt nichts, um auf die übergebenen Argumente zugreifen zu können...
-
DrGreenthumb schrieb:
man hat in der Funktion ja überhaupt nichts, um auf die übergebenen Argumente zugreifen zu können...
dafür gibts 'va_list', 'va_arg', ...
guckst du: http://www.eckart-winkler.de/computer/varargs.htm
-
Doch klar:
int foo(); main() { foo(3, 4); } int foo(int a, int b) { printf("%d", a+b); }
(Strenggenommen ist die Deklaration überflüssig, weil implizit die gleiche angenommen würde, aber seis drum.)
-
ok, also nicht wirklich der große Nutzen...
net schrieb:
DrGreenthumb schrieb:
man hat in der Funktion ja überhaupt nichts, um auf die übergebenen Argumente zugreifen zu können...
dafür gibts 'va_list', 'va_arg', ...
guckst du: http://www.eckart-winkler.de/computer/varargs.htmdas ist was anderes. Für (...)-Funktionen.
-
Nein, wie gesagt, nur K&R-Kompatibilität.