Fehler beim erstellen meiner ersten klasse



  • asc schrieb:

    Ganz davon abgesehen das ein Programm in der Regel auch beendet werden kann, selbst Services kann man "regulär" beenden).

    Ein Programm mit einer Endlosschleife kann nicht regulär beendet werden. Es kann nur vom Betriebssystem "abgschossen" werden. Dabei hat es keine Chance mehr, einen Rückgabewert aus der main-Funktion ans System zu übergeben.

    Tachyon schrieb:

    Die main-Funktion wird nicht von Dir aufgerufen, sondern quasi vom Betriebssystem. Und das Betriebsystem erwartet, dass die main-Funktion ein bestimmtes Format hat.

    Wenn dem so wäre, warum akzeptiert das Betriebssystem meine "void main()"-Funktion? Offenbar scheint es sich nicht daran zu stören.



  • Wieso lassen wir das nicht Shade of Mine's Post entscheiden ? 😉
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39346.html



  • c++fan 2009 schrieb:

    ...Wenn dem so wäre, warum akzeptiert das Betriebssystem meine "void main()"-Funktion? Offenbar scheint es sich nicht daran zu stören.

    Erstmal weiß das Betriebssystem natürlich nichts vom C++-Sprachstandard .. deswegen wäre es höchstens der Compiler, der etwas dagegen haben könnte (und vermutlich auch hat ... wenn man den Warninglevel vernünftig setzt).
    Zum Anderen wird der Compiler (wenn er es schluckt) es vermutlich in etwas "Betriebssystemkonformes" übersetzen.

    c++fan 2009 schrieb:

    ...
    Ein Programm mit einer Endlosschleife kann nicht regulär beendet werden. Es kann nur vom Betriebssystem "abgschossen" werden. Dabei hat es keine Chance mehr, einen Rückgabewert aus der main-Funktion ans System zu übergeben.

    Offensichtlich hast Du da einen exotischen Fall gefunden, den das Standardisierungskomitee bislang übersehen hat. Du solltest es unbedingt darauf hinweisen, dass ihre Sprachdefinition noch eine Lücke hat!
    Außerdem solltest Du gleich den Typ int_not_3 , die Abzweigungsbedingung if_never_true und den Funktionsklassifizierer never_called einreichen....

    Gruß,

    Simon2.



  • c++fan 2009 schrieb:

    Ein Programm mit einer Endlosschleife kann nicht regulär beendet werden. Es kann nur vom Betriebssystem "abgschossen" werden. Dabei hat es keine Chance mehr, einen Rückgabewert aus der main-Funktion ans System zu übergeben.

    Es ist aber im Allgemeinen nicht entscheidbar, ob ein Programm eine Endlosschleife enthält; somit muss davon ausgegangen werden, dass JEDE main-Funktion regulär beendet werden kann. Deshalb benötigt jede main-Funktion an jedem Verzweigungspfadende eine return-Anweisung, die einen int zurückliefert, weil die Aufrufer - wie schon gesagt - dies erwarten.
    Man kann nicht sagen: "Meine main muss nichts zurückliefern, weil sie ja sowieso nie (regulär) hält", weil du das nicht wissen kannst. Auch der Compiler kann das nicht wissen. Niemand kann das: http://de.wikipedia.org/wiki/Halteproblem
    Triviale Fälle wie

    while(1) { ... }
    

    sind nur Spezialfälle.



  • C++Fan: Die Signatur von main ist nicht verhandelbar. Der C++ Standard legt es so fest. Beweise dem Richter, daß weit und breit kein anderes Auto in Sicht war, als Du bei Rot über die Ampel gefahren bist, es wird Dir nicht helfen. Gesetz ist Gesetz.



  • GyroGearloose schrieb:

    c++fan 2009 schrieb:

    Ein Programm mit einer Endlosschleife kann nicht regulär beendet werden. Es kann nur vom Betriebssystem "abgschossen" werden. Dabei hat es keine Chance mehr, einen Rückgabewert aus der main-Funktion ans System zu übergeben.

    Es ist aber im Allgemeinen nicht entscheidbar, ob ein Programm eine Endlosschleife enthält...
    Triviale Fälle wie

    while(1) { ... }
    

    sind nur Spezialfälle.

    Aber genau hier geht es um diesen Spezialfall.



  • c++fan 2009 schrieb:

    GyroGearloose schrieb:

    c++fan 2009 schrieb:

    Ein Programm mit einer Endlosschleife kann nicht regulär beendet werden. Es kann nur vom Betriebssystem "abgschossen" werden. Dabei hat es keine Chance mehr, einen Rückgabewert aus der main-Funktion ans System zu übergeben.

    Es ist aber im Allgemeinen nicht entscheidbar, ob ein Programm eine Endlosschleife enthält...
    Triviale Fälle wie

    while(1) { ... }
    

    sind nur Spezialfälle.

    Aber genau hier geht es um diesen Spezialfall.

    Und du willst jetzt immer dein Programm von int main() zu void main() ändern, weil du weisst "oh mein Gott, ich werde eine Endlosschleife haben, sofort void hinkritzeln". Ist ja genauso wie, als wenn du mal using namespace std benutzt und mal net, weil du heute einfach mal lustig drauf bist. Also, einfach anpassen und es immer machen.



  • c++fan 2009 schrieb:

    GyroGearloose schrieb:

    c++fan 2009 schrieb:

    Ein Programm mit einer Endlosschleife kann nicht regulär beendet werden. Es kann nur vom Betriebssystem "abgschossen" werden. Dabei hat es keine Chance mehr, einen Rückgabewert aus der main-Funktion ans System zu übergeben.

    Es ist aber im Allgemeinen nicht entscheidbar, ob ein Programm eine Endlosschleife enthält...
    Triviale Fälle wie

    while(1) { ... }
    

    sind nur Spezialfälle.

    Aber genau hier geht es um diesen Spezialfall.

    Die Informatik ist aber (u.a.) die Wissenschaft der automatischen Informationsverarbeitung und nicht die der Alle-möglichen-Spezialfälle-Individuellverarbeitung.
    Denn das ist ja gerade der Witz deines Compilers, dass er unendlich viele (gültige) Quelltexte automatisch übersetzen kann, ohne dass er vorher jeden hartkodiert kennt.


Anmelden zum Antworten