Rufus Τ. Firefly schrieb:
> nuname schrieb:
>> void print(void) { ... }
>
> Das ist C89 ("ANSI-C") und neuer, sowie C++. Bei Funktionsprototypen
> werden die verwendeten Typen angegeben, so daß der Compiler bei
> Funktionsaufrufen eine Typüberprüfung vornehmen kann.
Dabei wird als spezielle Ausnahme für "keine Parameter" ein "void"
reingeschrieben, weil eine leere Liste in der vor-ANSI-Zeit schon eine
andere Bedeutung bekommen hatte.
>> print() { ... }
>
> Das ist Steinzeit-C ("K&R-C") oder eine C++-Ausnahme.
> In C++ wird da ein implizites void angenommen,
Ich würde es anders formulieren: In C++ wird das angenommen, was da
steht, nämlich keine Parameter. Dort gibt's also keine Ausnahme, sondern
vielmehr wurde die K&R-Ausnahme nicht aus C übernommen.
> in Steinzeit-C gibt es keine Typüberprüfung von Funktionsargumenten.
Deshalb war da das () ohne void auch schon dafür belegt und wurde aus
Kompatibilitätsgründen beibehalten. Bei C++ hat man diesen Zopf
abgeschnitten, da es sowieso die alte K&R-Variante nicht mehr
unterstützt. Deshalb ist dort auch ohne die void-"Krücke" die
Parameterliste leer.
nuname schrieb:
> Die Frage war doch in dem Fall, wie es nun richtig aussehen muss, wenn
> der Funktion keine Parameter übergeben werden.
Dann muß bei der Deklaration das (void) dranstehen. Wichtig ist, daß der
Aufrufer weiß, daß die Liste leer ist, also muß die Deklaration, die
dieser sieht, das (void) haben.