Funktion nur 1* ausführen
-
der standard verbietet void main() nicht.
-
Ist es so z.B. richtig? wird dann die Zeile -- static bool tmp = true; -- nur
1 Mal ausgeführt?void main(){ while( ...) { initialize(){ static bool tmp = true; if ( tmp == true){ do_something(); tmp = false; } } } }
-
dot schrieb:
der standard verbietet void main() nicht.
Zitat von http://tutorial.schornboeck.net/groessten_luegen.htm
void main()
[...] Aber in zahlreichen Büchern und Tutorials wird erklärt, dass void main() legales C++ sei, dass ist aber falsch! Es gab keinen C++-Standard, der je void main für legal erklärte. Die main-Funktion muss immer int zurückgeben!
-
cpplinux schrieb:
Ist es so z.B. richtig? wird dann die Zeile -- static bool tmp = true; -- nur
1 Mal ausgeführt?Bis auf die Syntaxfehler ja. Funktionen können natürlich nicht irgendwo mittendrin definiert werden, das ganze muss so aussehen:
void initialize() { static bool first_run = true; if (first_run) { /* mach was */ first_run = false; } } int main() { while (...) { initialize(); ... } }Noch einfacher wäre natürlich, initialize nicht in der Schleife aufzurufen ...
-
Bis auf, daß man keine lokalen Funktionen deklarieren kann, ist die Funktion so richtig, d.h. die statische Variable wird nur einmalig initialisiert.
Kannst es ja einfach mit einem Debugger testen...
-
The-Kenny schrieb:
void main()
[...] Aber in zahlreichen Büchern und Tutorials wird erklärt, dass void main() legales C++ sei, dass ist aber falsch! Es gab keinen C++-Standard, der je void main für legal erklärte. Die main-Funktion muss immer int zurückgeben!
C++ Standard 2003 §3.6.1 Absatz 2 schrieb:
...It shall have a return type of type int, but otherwise its type is implementation-defined...
ich seh nicht, dass da irgendwo steht, dass void main verboten ist...
-
"It shall have a return type of int". Wenn doch alle Aussagen im Standard so eindeutig wären...
"but otherwise its type is implementation-defined": Es gibt ja noch andere Aspekte am Typ einer Funktion als nur den Rückgabetyp. Die Argumente zum Beispiel.
-
but otherwise its type is implementation-defined...
!?
es steht aber weiters, dass ein möglicher anderer rückgabewert implementation defined ist. also nicht, dass es verboten ist...
-
Bashar schrieb:
Es gibt ja noch andere Aspekte am Typ einer Funktion als nur den Rückgabetyp. Die Argumente zum Beispiel.
im selben abschnitt steht weiters:
C++ Standard 2003 §3.6.1 Absatz 2 schrieb:
...All implementations shall allow both of the following definitions of main:
int main() { /* ... */ }and
int main(int argc, char* argv[]) { /* ... */ }es steht hingegen nicht, dass eine andere definition nicht erlaubt wäre.
natürlich ist der code mit void main() dann nicht portabel, aber es ist nicht verboten.
die aussage, dass void main() kein gültiges C++ ist, ist nach meiner interpretation des standards somit falsch.
-
Da steht, dass der Rückgabetyp int zu sein hat, das ist doch eindeutig. Die nachfolgenden Sätze betreffen die Argumente.
-
omg. sry. du hast recht. ich hab das falsch verstanden

ich hoffe man verzeiht mir
