void
-
hi,
ich wohlte mal fragen was bei C++ standard ist und auch was da unterschied ist....
a) int Test(void);
b) int Test();
das es keinen unterschied spielt, ist mir schon klar, aber was ist nun standard btw unterschied ?
-
a) ist eine historische Notation. Inzwischen sollte man b) benutzen.
-
Gute Programmierer benutzen Variante b.
-
Taurin schrieb:
a) ist eine historische Notation. Inzwischen sollte man b) benutzen.
guter progger schrieb:
Gute Programmierer benutzen Variante b.
kann man das auch irgendwo nachlesen ? link/tut oder so ?
ich meine wo steht, dass es inzwischen b) standard ist
-
a ist doch einfach sinnlos. es bringt nichts. warum sollte man es verwenden? jeder sieht sofort, auch ohne das void, das es eine parameterlose funktion ist.
-
Hallo,
in C++ ist Variante a) etwa so sinnvoll wie:// addiert eins zu i ++i;
Eine leere Parameterliste besagt in C++ bereits, dass die entsprechende Funktion nur ohne Parameter aufrufbar ist. Das void ist also redundant. Und Redundanz ist in den meisten Fällen nix gutes beim Programmieren.
In Uralt-C war das void wichtig, da hier eine leere Parameterliste nicht "keine Parameter" sondern "beliebig viele" bedeutete.
-
HumeSikkins schrieb:
In Uralt-C war das void wichtig, da hier eine leere Parameterliste nicht "keine Parameter" sondern "beliebig viele" bedeutete.
minor nitpick: Nur bei Funktionsdeklarationen ("Prototypen"). Deshalb ist int main(void) { ... } auch überflüssig.
edit: major nitpick: In Uralt-C gabs kein void, und selbst in C99 bedeutet () noch "beliebig" (in Deklarationen).
-
hmm, was denn nun ? ist (void) jetzt standard oder () ?
-
edit: major nitpick: In Uralt-C gabs kein void, und selbst in C99 bedeutet () noch "beliebig"
Echt? Wie konnte ich das nur übersehen. Und das wo ich doch regelmäßig Randy Meiyers' "The new C" lese.
hmm, was denn nun ? ist (void) jetzt standard oder () ?
Wenn du mit Standard Coding-Standard (also guter/empfohlener Stil) meinst, dann letzeres. Wenn du damit meinst, was gültiges C++ nach dem Sprachstandard ist, dann beides.
-
Nach ISO 14882 sind beide Varianten gleichberechtigt:
INTERNATIONAL STANDARD ISO/IEC 14882 First edition 1998-09-01
Programming languages — C++8.3.5 Functions
...
If the parameter-declaration-clause is empty, the function takes no arguments. The parameter list (void) is equivalent to the empty parameter list.
*Für den menschlichen Leser besser geeignet ist die Variante ohne ausdrückliches und überflüssiges "void".
-
HumeSikkins schrieb:
Wie konnte ich das nur übersehen. Und das wo ich doch regelmäßig Randy Meiyers' "The new C" lese.
6.7.5.3 §10, allerdings per 6.11.4 als veraltend (obsolescent) gekennzeichnet. Vielleicht ist das auch der langgesuchte Unterschied zwischen Draft und Standard.
-
@Bashar
Danke für's raussauchen
-
Hi,
also ich schreibe immer noch void und dachte eigentlich, dass das guter Stil ist, zumindest sehe ich dadurch schneller, dass ich keine Parameter brauche.
ChrisM
-
Mit was könnte denn () beim schnellen Draufschauen verwechselt werden?
Mit einer Funktion mit einem Parameter?
-
in kompilern wie VC++ und BCB gibt es sowas wie syntax highlighting
die heben das void ziemlich kräftig heror und es geht nicht so schnell unter wie 2 schwarze zeichen mehr.ich selbst hab bisweilen immer () benutzt, aber das mit dem void sieht irgendwie besser aus *find* auch wenn es vielleicht "doppelt gemoppelt" ist.
-
Das mit dem void ist nicht doppelt gemoppelt, sondern eine syntaktische Grausamkeit, die man in ANSI-C einführen musste, weil man die Kompatibilität zu altem C, wo () in Deklarationen eben für "egal" stand, wahren wollte. Warum grausam? foo(int) bedeutet, Funktion die ein int nimmt. foo(char), dass sie ein char-Argument nimmt. Wieso bedeutet foo(void) dann nicht, dass die Funktion ein void-Argument nimmt? Das ist eine syntaktische Sonderregel, die überhaupt nur funktioniert, weil es keine void-Objekte gibt, die man Funktionen übergeben könnte. C++ hat IMHO mehr als genug Sonderregeln ...
-
also im c++ ist es standard, dass man void NICHT verwendet ?
und nur überbleibsel von C-Zeiten ?
-
ja
-
also im c++ ist es standard, dass man void NICHT verwendet ?
Der Standard behandelt foo() und foo(void) exakt gleichwertig (s.o.).
Auch Compiler machen hier keinen Unterschied.Es sind lesende/schreibende Menschen, die hier Besonderheiten generieren.
Also reine Geschmackssache, und Geschmäcker wechseln.Meine persönliche Empfehlung: void weglassen, da hier nicht logisch.
-
@Bashar & Erhard
Euer Kontra-Argument is wegen z.B. funktionen die void* als parameter haben, hab ich das richtig verstanden?klingt plausiebel. *mit()weitermacht*