Angeben, wann und wo eine Anmerkung gültig istSpecifying When and Where an Annotation Applies

Wenn eine Anmerkung bedingt ist, sind möglicherweise andere Anmerkungen erforderlich, um dies für den Analyzer anzugeben.When an annotation is conditional, it may require other annotations to specify that to the analyzer. Wenn eine Funktion z. b. eine Variable aufweist, die entweder synchron oder asynchron sein kann, verhält sich die Funktion wie folgt: im synchronen Fall ist Sie immer schließlich erfolgreich, aber im asynchronen Fall meldet Sie einen Fehler, wenn Sie nicht sofort ausgeführt werden kann.For example, if a function has a variable that can be either synchronous or asynchronous, the function behaves as follows: In the synchronous case it always eventually succeeds, but in the asynchronous case it reports an error if it can't succeed immediately. Wenn die Funktion synchron aufgerufen wird, stellt die Überprüfung des Ergebnis Werts keinen Wert für den Code Analyse Wert dar, da er nicht zurückgegeben hätte.When the function is called synchronously, checking the result value provides no value to the code analyzer because it would not have returned. Wenn die Funktion jedoch asynchron aufgerufen wird und das Ergebnis der Funktion nicht aktiviert ist, kann ein schwerwiegender Fehler auftreten.However, when the function is called asynchronously and the function result is not checked, a serious error could occur. Dieses Beispiel veranschaulicht eine Situation, in der Sie die-Anmerkung _When_ – weiter unten in diesem Artikel – zum Aktivieren der Überprüfung verwenden können.This example illustrates a situation in which you could use the _When_ annotation—described later in this article—to enable checking.

Strukturelle AnmerkungenStructural Annotations

Verwenden Sie die folgenden strukturellen Anmerkungen, um zu steuern, wann und wo Anmerkungen angewendet werden.To control when and where annotations apply, use the following structural annotations.

AnmerkungAnnotation BESCHREIBUNGDescription
_At_(expr, anno-list) expr ein Ausdruck, der einen lvalue ergibt.expr is an expression that yields an lvalue. Die Anmerkungen in anno-list werden auf das Objekt angewendet, das von benannt wird expr .The annotations in anno-list are applied to the object that is named by expr. Für jede Anmerkung in anno-list expr wird in der Vorbedingung interpretiert, wenn die Anmerkung in der Vorbedingung interpretiert wird, und in der Post Bedingung, wenn die Anmerkung in der Post-Bedingung interpretiert wird.For each annotation in anno-list, expr is interpreted in pre-condition if the annotation is interpreted in pre-condition, and in post-condition if the annotation is interpreted in post-condition.
_At_buffer_(expr, iter, elem-count, anno-list) expr ein Ausdruck, der einen lvalue ergibt.expr is an expression that yields an lvalue. Die Anmerkungen in anno-list werden auf das Objekt angewendet, das von benannt wird expr .The annotations in anno-list are applied to the object that is named by expr. Für jede Anmerkung in anno-list expr wird in der Vorbedingung interpretiert, wenn die Anmerkung in der Vorbedingung interpretiert wird, und in der Post-Bedingung, wenn die Anmerkung in der nach Bedingung interpretiert wird.For each annotation in anno-list, expr is interpreted in pre-condition if the annotation is interpreted in precondition, and in post-condition if the annotation is interpreted in post-condition.

iter der Name einer Variablen, die auf die Anmerkung (einschließlich) beschränkt ist anno-list .iter is the name of a variable that is scoped to the annotation (inclusive of anno-list). iter weist einen impliziten Typ auf long .iter has an implicit type long. Identisch benannte Variablen in jedem einschließenden Bereich werden aus der Auswertung ausgeblendet.Identically named variables in any enclosing scope are hidden from evaluation.

elem-count ein Ausdruck, der eine ganze Zahl ergibt.elem-count is an expression that evaluates to an integer.
_Group_(anno-list) Die Anmerkungen in anno-list werden alle als Qualifizierer betrachtet, die für die Gruppen Anmerkung gelten, die auf jede Anmerkung angewendet wird.The annotations in anno-list are all considered to have any qualifier that applies to the group annotation that is applied to each annotation.
_When_(expr, anno-list) expr ein Ausdruck, der in konvertiert werden kann bool .expr is an expression that can be converted to bool. Wenn der Wert ungleich 0 (NULL true ) ist, gelten die Anmerkungen, die in angegeben sind, anno-list als anwendbar.When it is non-zero (true), the annotations that are specified in anno-list are considered applicable.

Standardmäßig wird für jede Anmerkung in anno-list expr als Verwendung der Eingabewerte interpretiert, wenn die Anmerkung eine Vorbedingung ist, und als die Ausgabewerte verwendet werden, wenn die Anmerkung eine nach Bedingung ist.By default, for each annotation in anno-list, expr is interpreted as using the input values if the annotation is a precondition, and as using the output values if the annotation is a post-condition. Um die Standardeinstellung zu überschreiben, können Sie die systeminterne Funktion verwenden, _Old_ Wenn Sie eine nach Bedingung auswerten, um anzugeben, dass die Eingabewerte verwendet werden sollen.To override the default, you can use the _Old_ intrinsic when you evaluate a post-condition to indicate that input values should be used. Hinweis: Verschiedene Anmerkungen können als Folge der Verwendung von aktiviert werden _When_ , wenn ein änderbarer Wert – beispielsweise *pLength – beteiligt ist, da das ausgewertete Ergebnis von expr in Vorbedingung möglicherweise von dem ausgewerteten Ergebnis in der nach Bedingung abweicht.Note: Different annotations might be enabled as a consequence of using _When_ if a mutable value—for example, *pLength—is involved because the evaluated result of expr in precondition may differ from its evaluated result in post-condition.

Siehe auchSee also