Was ist der Zweck der __in __out __in_opt __allowed (), wie funktionieren sie? Soll ich ähnliche Konstrukte in meinem eigenen Code verwenden?

StackOverflow https://stackoverflow.com/questions/4239809

  •  27-09-2019
  •  | 
  •  

Frage

Einige dieser Preprocessor Definitionen sind in der WinMain-Funktion und anderen Windows-Bibliotheksfunktionen. Was ist ihr Zweck? Wie arbeiten Sie? und ist es gute Praxis, sie in Ihre Implementierungen oder Funktionsaufrufe zu schreiben?

Meine anfängliche Forschung legt nahe, sie sind einfach eingerichtet equlivalent an:

#define __in 
#define __out
#define __in_opt

Das heißt, sie mit ersetzt bekommt nichts auf dem Preprocessor Pass. Sind sie nur ein Dokumentationsverfahren, ohne Funktionalität?

Wenn ja, kann ich den Vorteil, zu dokumentieren den Code in Zeilen wie diese sehen. Mit so etwas wie doxygen müssen Sie zweimal die Parameternamen schreiben. So dies in der Theorie helfen könnte Vervielfältigung, reduzieren und die Konsistenz ...

Ich habe keine Theorie, wie __allowed() funktionieren soll.

War es hilfreich?

Lösung

Sie sind SAL Anmerkungen im Source-Code Annotation Sprache. Microsoft Werkzeuge hängen davon ab. Die MSDN Library-Artikel ist hier . Ein gutes Beispiel ist Codeanalyse . Ein weiteres ganz ohne Bezug Werkzeug, aber durch diese Anmerkungen ermächtigt ist der Pinvoke Interop-Assistent.

Andere Tipps

SAL Anmerkungen sind nützlich für zwei Dinge:

  • Statische Analyse durch PREfast (Kompilierung mit / Analyse)
  • Menschliche Leser an den Anmerkungen und herauszufinden, aussehen können, wie eine Funktion aufgerufen werden soll, und schnell die Eingabe / Ausgabe-Parameter bestimmen.

Die Makros in der Tat tun, um verschiedene declspec Ausdrücke erweitern, wenn Ihr Code mit Analyse kompiliert wird. Ich benutze diese Anmerkungen die ganze Zeit in meinem Code.

Sie sind in einer Microsoft semantischen Analyse-Tool als Code Markups verwendet. Sofern Sie sich auf mit diesem Tool planen, gibt es wenig Zweck, sie zu verwenden.

Dieses Microsoft-Makros im Allgemeinen nichts erweitern, und werden als Hinweise für den Leser gedacht.

Allerdings habe ich das letzte Mal überprüft z.B. der Hinting auf dem MessageBox Argumente war völlig falsch, deutete an, dass erstes, zweiten und drittes Argument nützlichen Standardwert hatte (wenn Sie 0 angeben), während in Wirklichkeit ist es erstes und vierte Argument, die nützlichen Standardwert hat. Vielleicht auch der Titel Argument, das standardmäßig auf „Fehler“, aber ich habe noch nie so nützlich gefunden. Also, es ist nur eine Microsoft Sache, Hinweise darauf, dass Sie nicht können und sollten nicht darauf vertrauen, nur visuelle Unordnung irreführend.

Prost & hth.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top