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?