Toon posts:

[c++] void arguments

Pagina: 1
Acties:

Verwijderd

Topicstarter
Wat zegt de c/c++ standaard hier eigenlijk over?
Word er aangeraden om het void keyword te gebruiken? Op dit moment kan het ook zonder "void". Zal dit in de toekomst veranderen?

code:
1
2
3
void function(void)
// of
void function()

  • Lethalis
  • Registratie: April 2002
  • Niet online
Politisch correct is met 'void', maar sinds de introductie van C++ maakt het in principe niets meer uit.

Ask yourself if you are happy and then you cease to be.


Verwijderd

Topicstarter
Ja ik heb dus hier een collega die beweert dat in de next-generation van compilers die void verplicht wordt...... vandaar de vraag...

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20-08 00:10
Ik vind het ontzettend onlogisch om dat void-argument te gebruiken en volgens de compilers waar ik mee heb gewerkt is het volstrekt legaal en standard-compliant om 'm weg te laten. (Als dat void-argument verplicht wordt dan werkt niets van mijn C/C++ code meer! :o)

De enige reden die ik kan verzinnen om het verplicht te stellen is dat je dan het gezeik niet meer hebt dat je de default-constructor van een C++-object niet kan aanroepen:
C++:
1
2
3
4
5
6
7
8
void functie()
{
    Foo
        a(),  /* Illegaal, want lokale functie definitie ofzo */
        b(1), /* Legaal! */
        c,    /* Legaal; default constructor. */
        d = Foo(); /* Legaal; default constructor. */
}

Ik zou het logisch vinden dat "a()" ook geldig zou moeten zijn (het is namelijk hetzelfde geval als "b(1)" alleen dan met een argument minder) en als een functiedeclaratie zonder argumenten verplicht met een void-argument moet, dan is zo'n declaratie al niet meer ambigue.

Het is trouwens maar de vraag of je daar beter van wordt, want je verruilt slechts de ene inconsistentie door de andere.

[ Voor 124% gewijzigd door Soultaker op 07-11-2003 17:40 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 17:14
Onzin. Als er al iets gebeurt is het het afschaffen van void daar. Het politiek-correcte standpunt is dat de parameter lijst net zoveel types bevat als de argumentenlijst types moet hebben, en 0 argumenten = 0 types, dus ook geen void.

* MSalters schrijft mee aan de standaard en heeft dit nooit eerder gehoord.

PS. Foo a(); is volkomen legaal, 't is alleen zoals gezegd een functiedeclaratie. Maar dat heeft niet iets met void te maken, hetzelfde treedt op met
Foo a( Foo() );
Quiz vraag: Wat betekent Foo a( Foo() ); ?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

* .oisyn doet z'n hand omhoog

Dat is een functiedefinitie van een functie met als argument een pointer naar een functie die Foo retourneert

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Volgens mij waren ze hier in de war met C.

een functie met unknown no. arguments
code:
1
void foo()


en

een functie zonder arguments.
code:
1
void foo(void)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat is alleen bij de declaratie. En dan snap ik idd ook wel dat void aangeraden wordt bij definities

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1