Annotieren des Funktionsverhaltens
Zusätzlich zum Kommentieren von Funktionsparametern und Rückgabewerten können Sie Eigenschaften der gesamten Funktion kommentieren.
Funktionsanmerkungen
Die folgenden Anmerkungen gelten für die Funktion als Ganzes und beschreiben, wie sie sich verhält oder was sie erwartet, wahr zu sein.
Anmerkung | Beschreibung |
---|---|
_Called_from_function_class_(name) |
Nicht dazu gedacht, eigenständig zu sein; Stattdessen ist es ein Prädikat, das mit der _When_ Anmerkung verwendet werden soll. Weitere Informationen finden Sie unter Angeben von Wann und Wo eine Anmerkung gilt.Der name Parameter ist eine beliebige Zeichenfolge, die auch in einer _Function_class_ Anmerkung in der Deklaration einiger Funktionen angezeigt wird. _Called_from_function_class_ gibt "nonzero" zurück, wenn die aktuell analysierte Funktion mit _Function_class_ demselben Wert versehen name ist. Andernfalls wird Null zurückgegeben. |
_Check_return_ |
Kommentiert einen Rückgabewert und gibt an, dass der Aufrufer ihn prüfen soll. Die Überprüfung meldet einen Fehler, wenn die Funktion in einem ungültigen Kontext aufgerufen wird. |
_Function_class_(name) |
Der name Parameter ist eine beliebige Zeichenfolge, die vom Benutzer festgelegt wird. Es ist in einem Namespace vorhanden, der sich von anderen Namespaces unterscheidet. Eine Funktion, ein Funktionszeiger oder – am nützlichsten – ein Funktionszeigertyp kann als Zugehörigkeit zu einer oder mehreren Funktionsklassen festgelegt werden. |
_Raises_SEH_exception_ |
Kommentiert eine Funktion, die immer eine strukturierte Ausnahmehandler-Ausnahme (SEH) auslöst, vorbehaltlich _When_ und _On_failure_ Bedingungen. Weitere Informationen finden Sie unter Angeben von Wann und Wo eine Anmerkung gilt. |
_Maybe_raises_SEH_exception_ |
Kommentiert eine Funktion, die optional eine SEH-Ausnahme auslösen kann, vorbehaltlich _When_ und _On_failure_ Bedingungen. |
_Must_inspect_result_ |
Kommentiert alle Ausgabewerte, einschließlich des Rückgabewerts, der Parameter und der Globalen. Der Analysebericht meldet einen Fehler, wenn der Wert im kommentierten Objekt anschließend nicht überprüft wird. "Inspektion" enthält, ob sie in einem bedingten Ausdruck verwendet wird, einem Ausgabeparameter oder global zugewiesen oder als Parameter übergeben wird. Für Rückgabewerte _Must_inspect_result_ impliziert _Check_return_ . |
_Use_decl_annotations_ |
Kann anstelle der Liste der Anmerkungen in der Kopfzeile in einer Funktionsdefinition (auch als Funktionstext bezeichnet) verwendet werden. Wenn _Use_decl_annotations_ sie verwendet werden, werden die Anmerkungen, die in einem Bereichsheader für dieselbe Funktion angezeigt werden, verwendet, als ob sie auch in der Definition vorhanden sind, die die _Use_decl_annotations_ Anmerkung enthält. |
Erfolgs-/Fehleranmerkungen
Eine Funktion kann fehlschlagen, und wenn dies der Fall ist, sind die Ergebnisse möglicherweise unvollständig oder unterscheiden sich von den Ergebnissen, wenn die Funktion erfolgreich ist. Die Anmerkungen in der folgenden Liste bieten Möglichkeiten, das Fehlerverhalten auszudrücken. Um diese Anmerkungen zu verwenden, müssen Sie es ihnen ermöglichen, den Erfolg zu bestimmen; daher ist eine _Success_
Anmerkung erforderlich. Beachten Sie, dass NTSTATUS
und bereits eine _Success_
Anmerkung integriert ist. Wenn Sie jedoch Ihre eigene _Success_
Anmerkung NTSTATUS
angeben oderHRESULT
, wird die integrierte Anmerkung HRESULT
außer Kraft gesetzt.
Anmerkung | Beschreibung |
---|---|
_Always_(anno_list) |
anno_list _On_failure_(anno_list) Entspricht ; d. h. die Anmerkungenanno_list , die angewendet werden, ob die Funktion erfolgreich ist. |
_On_failure_(anno_list) |
Wird nur verwendet, wenn _Success_ sie auch zum Kommentieren der Funktion verwendet wird – entweder explizit oder implizit über _Return_type_success_ eine Typedef. Wenn die _On_failure_ Anmerkung für einen Funktionsparameter oder Rückgabewert vorhanden ist, verhält sich jede Anmerkung in anno_list (anno) so, als wäre sie codiert als _When_(!expr, anno) , wobei expr der Parameter für die erforderliche _Success_ Anmerkung steht. Dies bedeutet, dass die konkludente Anwendung auf _Success_ alle Nachbedingungen nicht gilt _On_failure_ . |
_Return_type_success_(expr) |
Kann auf einen Typedef angewendet werden. Gibt an, dass alle Funktionen, die diesen Typ zurückgeben und nicht explizit _Success_ haben, als ob sie _Success_(expr) vorhanden sind. _Return_type_success_ kann nicht für eine Funktion oder einen Funktionszeigertyp verwendet werden. |
_Success_(expr) |
expr ist ein Ausdruck, der einen Wert zurückgibt. Wenn die _Success_ Anmerkung in einer Funktionsdeklaration oder -definition vorhanden ist, verhält sich jede Anmerkung (anno ) für die Funktion und in postbedingung so, als wäre sie codiert als _When_(expr, anno) . Die _Success_ Anmerkung kann nur für eine Funktion verwendet werden, nicht für die Parameter oder den Rückgabetyp. Es kann höchstens eine _Success_ Anmerkung für eine Funktion geben, und sie darf nicht in einem _When_ , oder _At_ _Group_ . Weitere Informationen finden Sie unter Angeben von Wann und Wo eine Anmerkung gilt. |
Siehe auch
- Verwenden von SAL-Anmerkungen zum Reduzieren von C/C++-Codefehlern
- Einführung in SAL
- Hinzufügen einer Anmerkung zu Funktionsparametern und Rückgabewerten
- Hinzufügen einer Anmerkung zu Strukturen und Klassen
- Hinzufügen einer Anmerkung zum Sperrverhalten
- Angeben, wann und wo eine Anmerkung gültig ist
- Systeminterne Funktionen
- Empfohlene Vorgehensweisen und Beispiele