2009-07-01 3 views
5

GCC scheint "und"/"oder" anstelle von "& &"/"||" zuzulassen in C++ - Code; Wie ich jedoch erwartet habe, unterstützen viele Compiler (insbesondere MSVC 7) dies nicht. Die Tatsache, dass GCC dies erlaubt, hat uns einige Ärgernisse bereitet, da wir verschiedene Entwickler haben, die auf verschiedenen Plattformen an der gleichen Codebasis arbeiten, und gelegentlich treten diese "Fehler" auf, wenn Leute zwischen Python und C++ - Entwicklung hin- und herwechseln.Ist es möglich, die Unterstützung für "und"/"oder" booleschen Operator Verwendung in gcc zu deaktivieren?

Idealerweise würden wir alle daran denken, die entsprechende Syntax zu verwenden, aber für die Situationen, in denen wir gelegentlich versagen, wäre es wirklich nett, wenn GCC es nicht rutschen lassen würde. Hat jemand Ideen zu Ansätzen dazu?

Wenn "and" und "or" einfach #defines sind, dann könnte ich #undef bei der Verwendung von GCC verwenden, aber ich befürchte, dass es eher in den Compiler auf einer grundlegenderen Ebene eingebaut ist.

Danke.

Antwort

16

Sie sind Teil des C++ - Standards, siehe zum Beispiel this StackOverflow answer (die die relevanten Teile des Standards zitiert).

Eine andere Antwort in der gleichen Frage erwähnt, wie man das Gegenteil tut: machen Sie sie in MSVC arbeiten.

Um sie in GCC zu deaktivieren, verwenden Sie -fno-operator-names. Beachten Sie, dass Sie dabei tatsächlich in einen nicht-standardmäßigen C++ - Dialekt wechseln, und Sie riskieren, dass Sie am Ende Code schreiben, der bei standardkompatiblen Compilern möglicherweise nicht korrekt kompiliert wird (wenn Sie z Variable mit einem Namen, der normalerweise reserviert wäre).

0

Haben Sie Code-Analyse-Tools in Betracht gezogen? Etwas ähnliches wie FxCop? Mit FxCop können Sie Ihre eigenen Regeln schreiben (überprüfen Sie für & &) und Sie können festlegen, dass es während der Vorkompilierungsphase ausgeführt wird.

7

Die Wörter sind Standard in C++ ohne die Einbeziehung eines Headers.

Die Wörter sind Standard in C, wenn Sie die Kopfzeile <iso646.h> einschließen.

MSVC leistet Ihnen keinen Dienst, indem es die Standards nicht unterstützt.

Sie könnten jedoch Tools verwenden, um die Nichtnutzung der Schlüsselwörter zu erzwingen. Und es kann eine Kodierungsrichtlinie sein, und Sie können Ihr Team schnell schulen, um keine dämlichen Portabilitätsfehler zu machen. Es ist nicht schwer, das Problem zu vermeiden.

-3

-pedantic-errors kann hierfür unter anderem Gnu-Ismen helfen.

+1

-1: Das ist kein Gnu-ism, es gehört zum Sprachstandard. –

Verwandte Themen