main() rekursiv aufrufen?



  • otze schrieb:

    @minastaros eine Endlosrekursion ist Äquivalent zu einer endlosschleife, beide sind nicht berechenbar.

    Schon wieder? Das hatten wir doch gerade erst. Berechenbarkeit ist eine Eigenschaft von Funktionen. Es ist sinnlos zu sagen, ein Programm sei berechenbar oder nicht berechenbar.



  • Ich meine den Begriff der Rekursion als mathematisches Prinzip. Soweit ich sie kenne, ist sie ja eigentlich dadurch definiert, dass sie irgendwann abbricht und nur dadurch funktioniert wie z.B. Quicksort oder Fakultäten...

    Kenn mich da nicht so aus, daher meine Frage, ob es in der Mathematik eben so etwas gibt wie eine rein theoretische "infinite Rekursion".

    Klar, dass man eine Endlosschleife programmieren kann und daher auch eine Funktion, die sich immer wieder selbst aufruft, bis der Speicher alle ist. Aber ich denke eben nicht, dass man hier wirklich von Rekursion spricht im Sinne eines bestimmten Algorithmus'.

    (Ich geb zu, das ist etwas weit weg vom Ursprungsthema, aber hat mich gerade interessiert...)



  • DrakoXP schrieb:

    Im Standard steht ausdrücklich "shall not" und nicht "must not".

    Lern bitte richtig Englisch. "Shall" ist am besten mit "sei" zu übersetzen, d.h. die Autoren der Norm hatten die freie Wahl und haben sich für eine bestimmte Festlegung entschlossen und diese muß nun eingehalten werden.



  • ccc schrieb:

    Im Standard heisst es:

    The function main shall not be used (3.2) within a program.

    Auf Deutsch: du darfst sie nicht aufrufen. Der Grund dafür ist mir allerdings schleierhaft.

    Wahrscheinlich liegt es an der Konstruktoraufrufen von statischen globalen Objekten, diese würden dann mehrfach ausgeführt. C kennt so etwas nicht, daher existiert das Problem auch nicht.



  • ~john schrieb:

    Wahrscheinlich liegt es an der Konstruktoraufrufen von statischen globalen Objekten, diese würden dann mehrfach ausgeführt. C kennt so etwas nicht, daher existiert das Problem auch nicht.

    Diese sollten vor main ausgeführt werden. main ist auch nur eine Funktion wie jede andere auch und wer schon mal den Debugger genutzt hat, wird sicherlich mitbekommen haben, dass es weder die erste noch die letzte Funktion ist, die gerufen wird.


  • Mod

    C++-Standard, Anhang C:

    3.6
    Change: Main cannot be called recursively and cannot have its address taken
    Rationale: The main function may require special actions.
    Effect on original feature: Deletion of semantically well-defined feature
    Difficulty of converting: Trivial: create an intermediary function such as mymain(argc, argv).
    How widely used: Seldom



  • ~john schrieb:

    DrakoXP schrieb:

    Im Standard steht ausdrücklich "shall not" und nicht "must not".

    Lern bitte richtig Englisch. "Shall" ist am besten mit "sei" zu übersetzen, d.h. die Autoren der Norm hatten die freie Wahl und haben sich für eine bestimmte Festlegung entschlossen und diese muß nun eingehalten werden.

    In der englischen Sprache wird vieles im allgemeinen sehr höflich ausgedrückt. "I'm not sure I agree with you." meint schon eine recht starke Ablehnung.

    Das "shall not" ist daher mit Sicherheit als "darf nicht" zu sehen (oder zumindest als "es wird dringendst davon abgeraten").

    Unabhängig von den nachfolgenden, inhaltlichen Posts zum Thema...



  • Solche Spezifikationen werden doch nicht geschrieben, damit da jeder rein interpretieren kann, was er will.
    Ein 'shall' ist völlig gleichwertig zu einem 'must' und einem 'required'.
    Zumindest die RFC macht das so und der C++ Standard wird das nicht anders machen.



  • Richtig, daher habe ich ja erklärt, wieso "shall" für unsere Ohren zunächst wie "sollte" klingt.

    In den 10 Geboten heißt es auch "You shall not kill"...



  • minastaros schrieb:

    In den 10 Geboten heißt es auch "You shall not kill"...

    Das heißt rein zufällig auch "Du sollst nicht töten". Und das darf man durchaus als sollen und nicht als nicht dürfen auffassen.



  • Ja, und deshalb heißt es auch "shall not" und nicht "should not" (also "sollte nicht").

    Vielleicht können wir uns darauf einigen, dass das "shall" in einem nahezu gesetzesähnlichen Text durchaus den Willen des Autors bekräftigt, dass besagte Tätigkeit wenn irgend möglich nicht auszuführen sei. 😉 Jedenfalls mehr als eine bloße Empfehlung und vielleicht einen Tick weniger als ein striktes Verbot. Einverstanden?

    Denke, das ist jetzt schon ziemlich off topic... Melde mich daher für heute ab.


Anmelden zum Antworten