C++ nach ISO Standart



  • Daniel E. schrieb:

    Marc++us: Dein "völlig legaler Code" von oben, ist leider nicht wirklich konform. (Es gibt C++-Compiler, die spielen da nicht mit [eine Steinzeitversion von Sun mW]).

    Wieso das denn nicht?



  • ist der dev-c++ 4 näher am Standard als mein vc++6.0?



  • Es gibt keinen Standard für IDEs.



  • Marc++us schrieb:

    Daniel E. schrieb:

    Dein "völlig legaler Code" von oben, ist leider nicht wirklich konform. (Es gibt C++-Compiler, die spielen da nicht mit [eine Steinzeitversion von Sun mW]).

    Wieso das denn nicht?

    Das Semikolon nach dem Funktionsbauch des Konstruktors ist pedantischerweise nicht erlaubt. Außer dem besagten Compiler scheint sich da aber (zurecht) niemand dran zu stören.



  • Daniel E.: Wo steht das? Nach der Grammatik ist eine leere Deklaration in einer Klasse erlaubt. 9.2:

    class-specifier: class-head { member-specification_opt }

    member-specification: member-declaration member-specification_opt

    member-declaration: decl_specifier_opt member_declarator_list_opt ;

    Wenn man pingelig ist, interpretiert man 9.2.1 "... and each such member-declaration shall declare at least one member name of the class" als Zusatzregel zur Grammatik, dann kommt aber die Ableitung

    member-declaration: function-definition ;_opt

    zum Tragen.



  • Bashar schrieb:

    dann kommt aber die Ableitung

    member-declaration: function-definition ;_opt

    zum Tragen.

    Bezieht sich das '_opt' auf das Semikolon oder die 'function-definition'?

    (Falls ich danebengelegen haben sollte, habe ich natürlich absichtlich die Unwahrheit gesagt, um hier direkt vor Ort die Nützlichkeit der C++-Norm zu belegen. [So was muss man sich ausdenken, nur weil man ohne nachzusehen postet. <Sowas aber auch.>]) (dreifache Klammerverschachtelung = ein Smiley)



  • auf das Semikolon



  • @eineFrage: Der Compiler des Dev-C++ (4.9.x.x) ist deutlich näher am Standard als der Compiler des MSVC++6.



  • @Bashar und Daniel E.
    Sehe ich das richtig, dass dieses "Semikolon nach Funktionsdefinition erlaubt" nur *innerhalb* einer Klassendefinition gilt, es außerhalb aber verboten ist:

    class A
    {
    public:
    void func() {}; // erlaubt
    void func2();
    };
    
    void A::func2() {}; // verboten
    

    Bitte sagt ja 🙂



  • Hume: Öhm, ich hab zwar letzte Woche noch argumentiert, dass die Grammatik das zuläßt:

    simple-declaration: decl-specifier-seq_opt init-declarator-list_opt ;

    Aber im Text steht, dass die "init-declarator-list" nur weggelassen werden kann, wenn das ganze eine Klasse oder einen Aufzählungstyp deklariert. Schade eigentlich, was ist so schlimm an leeren Deklarationen?


Anmelden zum Antworten