Undefined behavior



  • Hallo,

    warum soll das undefined behavior sein, ich würde das eher als error bezeichnen. Soweit ich weiss kompiliert das doch gar nicht oder.

    int x = 1;
    return x / 0; // undefined behavior
    


  • blurry333 schrieb:

    Hallo,

    warum soll das undefined behavior sein, ich würde das eher als error bezeichnen. Soweit ich weiss kompiliert das doch gar nicht oder.

    undefined behavior kann alles heißen. Der Compiler kann dann machen, was er will. Einen Fehler ausgeben, den Wert irgendwie definieren, crashen, ein anderes Programm ausgeben, kein Programm ausgeben, alle deine Dateien löschen, Selbstmord begehen, den Computer ausschalten...
    Egal, was er macht, er ist standardkonform.


  • Mod

    blurry333 schrieb:

    warum soll das undefined behavior sein, ich würde das eher als error bezeichnen.

    undefined behaviour ist ein definierter Begriff des Standards. error dagegen nicht...


  • Mod

    camper schrieb:

    blurry333 schrieb:

    warum soll das undefined behavior sein, ich würde das eher als error bezeichnen.

    undefined behaviour ist ein definierter Begriff des Standards. error dagegen nicht...

    Dann nimm eben "ill-formed, diagnostic required". Jeder Compiler sollte dir bei adäquatem Warnungslevel zumindest eine Warnung ausgeben.


  • Mod

    Arcoth schrieb:

    camper schrieb:

    blurry333 schrieb:

    warum soll das undefined behavior sein, ich würde das eher als error bezeichnen.

    undefined behaviour ist ein definierter Begriff des Standards. error dagegen nicht...

    Dann nimm eben "ill-formed, diagnostic required". Jeder Compiler sollte dir bei adäquatem Warnungslevel zumindest eine Warnung ausgeben.

    Bei jedem anderen TE wäre meine Antwort etwas anders ausgefallen. Und das Ganze ist UB, weil der Standard das so festlegt.



  • aber sind wir doch mal ehrlich. Die meisten von uns verwenden doch entweder
    Visual STudio Compiler oder gcc oder clang.(Das sind doch die 3 wichtigsten ?!)
    Und die wuerden in diesem Fall nicht mal kompilieren !



  • Ich zitiere mal von Wikipedia:

    [...] and so division by zero is undefined.
    [...] In computing, a program error may result from an attempt to divide by zero.
    Depending on the programming environment and the type of number
    (e.g. floating point, integer) being divided by zero, it may generate positive or
    negative infinity by the IEEE 754 floating point standard, generate an exception,
    generate an error message, cause the program to terminate, or result in a special
    not-a-number value.

    aus https://en.wikipedia.org/wiki/Division_by_zero


  • Mod

    blurry333 schrieb:

    aber sind wir doch mal ehrlich. Die meisten von uns verwenden doch entweder
    Visual STudio Compiler oder gcc oder clang.(Das sind doch die 3 wichtigsten ?!)
    Und die wuerden in diesem Fall nicht mal kompilieren !

    Natürlich nicht. Weil eine return-Anweiusung nur innerhalb einer Funktionsdefinition stehen darf. Und wenn ich mal erweitere auf

    int foo() { return 1 / 0; }
    int main() {}
    

    sind gcc und clang happy (und visual c++ vermutlich auch).


  • Mod

    Und das Ganze ist UB, weil der Standard das so festlegt.

    Das wissen wir. Du hast gesagt dass der Begriff den blurry verwendet dem Standard nicht bekannt ist. Ist er aber, in einer anderen Form die ich erwähnt habe. Demnach erwartet blurry dass das Programm eben ill-formed ist.


  • Mod

    Arcoth schrieb:

    Und das Ganze ist UB, weil der Standard das so festlegt.

    Das wissen wir. Du hast gesagt dass der Begriff den blurry verwendet dem Standard nicht bekannt ist. Ist er aber, in einer anderen Form die ich erwähnt habe. Demnach erwartet blurry dass das Programm eben ill-formed ist.

    Und du dürftest mittloerweile mit dem Standard vertraut genug sein, um eine Ahnung zu haben, warum der Standard den Sachverhalt so regelt wie er es tut. Das ist sicher nicht schwieriger als die Interpretation von blurrys Frage.


  • Mod

    Und du dürftest mittloerweile mit dem Standard vertraut genug sein, um eine Ahnung zu haben, warum der Standard den Sachverhalt so regelt wie er es tut.

    😕 Reden wir aneinander vorbei? Es ist mir nämlich im Moment egal warum oder ob 1/0 undefiniert ist. Es ging mir um den Begriff "error".


  • Mod

    Arcoth schrieb:

    Und du dürftest mittloerweile mit dem Standard vertraut genug sein, um eine Ahnung zu haben, warum der Standard den Sachverhalt so regelt wie er es tut.

    😕 Reden wir aneinander vorbei? Es ist mir nämlich im Moment egal warum oder ob 1/0 undefiniert ist. Es ging mir um den Begriff "error".

    Da fällt mir jetzt einiges dazu ein, allerdings alles OT. 🙄
    Und weil ich nicht unproduktiv sein will, spare ich mir mal, in diesem Thread weiter zu antworten.


Anmelden zum Antworten