C vs. C++



  • Dann machen wirs halt noch ein bisschen netter:

    ??=include <stdlib.h>
    ??=include <stdio.h>
    
    int main (argc, argv)
      int argc;
      char* argv??(??);
    ??<
      char* x = malloc(192);
      191??(x??) = 0;
      printf("%s??/n", x);
      free(x);
    ??>
    


  • Als Troll muss man auch einen guten Sinn fuer Humor haben. Sonst ist man nicht trollig sondern unnoetig.



  • Liselucke schrieb:

    Dann machen wirs halt noch ein bisschen netter:

    Wie aus dem Lehrbuch (K&R 1. Edition)



  • Ramelucke schrieb:

    mit C compilieren, aber nicht mit C++? Heißt es nicht immer, C++ sei ein striktes Superset von C?

    bei mir kompiliert es mit c++;


  • Mod

    rapso schrieb:

    Ramelucke schrieb:

    mit C compilieren, aber nicht mit C++? Heißt es nicht immer, C++ sei ein striktes Superset von C?

    bei mir kompiliert es mit c++;

    Das darf es aber nicht; der Standard sagt sogar explizit, dass implizite Umwandlungen dann und nur dann geschehen dürfen, wenn sie gültig sind. Compiler? Compilerschalter?



  • Dir ist klar, das in C++, anders als in C, eine constraint violation nicht den Abbruch der Uebersetzung verlangt?


  • Mod

    Arcoth schrieb:

    Dir ist klar, das in C++, anders als in C, eine constraint violation nicht den Abbruch der Uebersetzung verlangt?

    Ich habe dazu extra in den Standard geguckt. Der sagt halt zwei Dinge:
    1. Wie eine "well-formed" Umwandlung aussieht. Wobei natürlich richtig ist, dass für nicht "well-formed" Programme eine Diagnosenachricht ausreichend ist, außer es wird explizit anders verlangt. Hier wird nichts anderes verlangt.
    2. Anderswo wird aber gesagt, dass eine Umwandlung dann und nur dann vorgenommen werden darf, wenn sie "well-formed" ist, aber ohne Angabe, was geschehen muss, wenn dies nicht gilt.

    Nichtsdestotrotz würde mich interessieren, welcher C++-Compiler das durchgehen lässt, denn das wäre schon eine recht krasse Aufweichung des Typensystems.



  • Arcoth schrieb:

    Dir ist klar, das in C++, anders als in C, eine constraint violation nicht den Abbruch der Uebersetzung verlangt?

    Das ist doch Nonsens.
    Ein standardkonformer C-Compiler muss bei einer constraint violation lediglich eine "Meldung" (in beliebiger Form) generieren.
    Ob der Compilerbauer dann anschließend diese "Meldung" intern als fatalen Fehler interpretiert und die Compilierung abbricht oder als nur Warnung und weitermacht ist nicht spezifiziert.



  • @SeppJ: Der relevante Text ist

    <a href= schrieb:

    [intro.compliance]/(2.2)">If a program contains a violation of any diagnosable rule or an occurrence of a construct described in this Standard as “conditionally-supported” when the implementation does not support that construct, a conforming implementation shall issue at least one diagnostic message.

    Ich habe keine Ahnung von welchem Paragraphen du in 2. redest; es wäre hilfreich wenn du ihn auch nennst 😛

    Was C angeht, hatte ich Unrecht, danke Wutz. Siehe 5.1.1.3/1.

    Nichtsdestotrotz würde mich interessieren, welcher C++-Compiler das durchgehen lässt, denn das wäre schon eine recht krasse Aufweichung des Typensystems.

    Ist GCC nicht extrem lax bei Zeigerkonvertierungen?


  • Mod

    Arcoth schrieb:

    Nichtsdestotrotz würde mich interessieren, welcher C++-Compiler das durchgehen lässt, denn das wäre schon eine recht krasse Aufweichung des Typensystems.

    Ist GCC nicht extrem lax bei Zeigerkonvertierungen?

    Eigentlich nicht. Mir wäre kein Compiler bekannt, der dies erlaubt, daher frage ich ja.


Anmelden zum Antworten