Wenn ich einen Codeabschnitt in C# geschrieben habe, der in eine #if
-Direktive eingebettet ist, welche (wenn überhaupt) Präzedenz wird auf alle booleschen Operatoren angewendet, die in dieser Direktive verwendet werden könnten?Welchen Vorrang haben Operatoren in C# -Preprozessor-Direktiven?
Mit anderen Worten:
#if DEBUG || MYTEST && PLATFORM_WINDOWS
// ... Some code here
#endif
Wird das einfach nach rechts, wie
#if (DEBUG || MYTEST) && PLATFORM_WINDOWS
Und in ähnlicher Weise nach links ausgewertet werden, würde
#if PLATFORM_WINDOWS && DEBUG || MYTEST
als
bewertet werden#if (PLATFORM_WINDOWS && DEBUG) || MYTEST
Oder gibt es eine Reihenfolge für & & vs ||?
Edit: Um klar zu sein, mir ist klar, dass ich den Code selbst ausführen kann, um es zu testen, und ich habe. Ich suche nach einer Antwort, die mir etwas Offizielles gibt - ein Verweis auf Dokumentation oder Ähnliches, was mir ein tieferes Verständnis der zugrunde liegenden Mechanismen von Direktiven geben kann. Ich würde gerne wissen, ob es ein bestimmtes beabsichtigtes Verhalten gibt oder ob das etwas Undefiniertes ist.
IMO Klammer sollte sowieso verwendet werden, um Denken zu vermeiden Overhead und solche Verwirrung – thumbmunkeys
Warum nicht einige Tests laufen lassen und uns sagen?Das können Sie leicht selbst herausfinden. –
Die einfache Lösung, die auch große Vorteile bei der Lesbarkeit bietet, besteht darin, sie nur in Klammern zu setzen. – qaphla