C #: Ist restore Pragma Warnung benötigt?
-
05-09-2019 - |
Frage
Msdn ich dieses:
#pragma warning disable warning-list
#pragma warning restore warning-list
In den Beispielen sowohl disable
und restore
verwendet. Ist es notwendig, restore
wenn ich es deaktiviert für eine ganze Datei möchten?
Wie, wenn ich nicht wiederherstellen, wie weit geht es tragen? Sind die Warnungen für alles danach kompiliert deaktiviert? Oder nur für den Rest der Datei? Oder wird es ignoriert?
Lösung
Wenn Sie nicht wieder her die Sperrung für den Rest der Datei aktiv ist.
Interessanterweise ist dieses Verhalten nicht definiert in der Sprachspezifikation . (Siehe Abschnitt 9.5.8) jedoch der 9.5.1 Abschnitt auf Bedingte Kompilierung Symbolen anzeigt dies „bis zum Ende des Datei Verhaltens“
Das Symbol bleibt, bis eine definierte #undef Richtlinie für das gleiche Symbol verarbeitet wird, oder bis zum Ende der Quelldatei erreicht ist.
der ‚Pre-Prozessor‘ Da ist tatsächlich Teil der lexikalischen Analysephase der Zusammenstellung ist es wahrscheinlich, dass dieses Verhalten ein wirksamer Vertrag für Microsoft und alle andere Implementierungen für die absehbare Zukunft (zumal die alternativen wäre äußerst komplex und nicht deterministisch auf Basis von Quelldatei Kompilierung Reihenfolge)
Andere Tipps
Lassen Sie uns sagen, dass ich ein privates Feld haben, die Reflexionen mit initialisiert wird, offensichtlich der Compiler keinen Code in dieses Feld direkt zu schreiben, so können Sie eine Warnung wird -. Dass ich will nicht zeigen
Lassen Sie sich auch sagen, ich habe ein anderes privates Feld definiert 3 Zeilen unter dem ersten, dass ich zu initialisieren vergessen, wenn ich die Warnung für die gesamte Datei zu deaktivieren wird dies nicht eine Warnung auslösen.
die beste Verwendung für Pragma Warnung ist also ein „Warnung abzuschalten“ in Ordnung zu bringen, bevor die Linie, die die Warnung verursacht, die ich will, zu unterdrücken und eine „Warnung wiederherstellen“ direkt nach der Zeile so die gleichen Bedingungen in einem anderen Lage in der Datei wird immer noch eine Warnung auslösen.
Nein, Sie werden feststellen, dass die Compiler automatisch jede deaktiviert Warnung wiederherstellen, sobald es fertig ist eine Quelldatei Parsing.
#pragma warning disable 649
struct MyInteropThing
{
int a;
int b;
}
#pragma warning restore 649
Im obigen Beispiel hat mich die Warnung CS00649 gedreht, weil ich die Absicht, diese Struktur auf unsichere Art und Weise zu verwenden. Der Compiler wird nicht erkennen, dass ich in den Speicher schreiben, die diese Art von Layout hat, damit ich die Warnung ignorieren werden wollen:
Feld ‚Feld‘ wird nie zugewiesen und wird immer den Standardwert ‚Wert‘ hat
Aber ich will nicht die gesamte Datei nicht ungeprüft gelassen werden.