Anotación del comportamiento de la función
Además de anotar parámetros de función y valores devueltos,puede anotar las propiedades de toda la función.
Anotaciones de función
Las anotaciones siguientes se aplican a la función en su conjunto y describen cómo se comporta o lo que espera que sea cierto.
| Anotación | Descripción |
|---|---|
_Called_from_function_class_(name) |
No está pensado para ser independiente; en su lugar, es un predicado que se va a usar con la _When_ anotación . Para obtener más información, vea Especificar cuándo y dónde se aplica una anotación.El name parámetro es una cadena arbitraria que también aparece en una anotación _Function_class_ en la declaración de algunas funciones. _Called_from_function_class_ devuelve un valor distinto de cero si la función que se está analizando actualmente se anota mediante que tiene el mismo valor de ; de lo _Function_class_name contrario, devuelve cero. |
_Check_return_ |
Anota un valor devuelto y indica que el autor de la llamada debe inspeccionarlo. El comprobaciónr notifica un error si se llama a la función en un contexto void. |
_Function_class_(name) |
El name parámetro es una cadena arbitraria designada por el usuario. Existe en un espacio de nombres distinto de otros espacios de nombres. Una función, un puntero de función o, lo que es más útil, un tipo de puntero de función se puede designar como perteneciente a una o varias clases de función. |
_Raises_SEH_exception_ |
Anota una función que siempre genera una excepción de controlador de excepciones estructurado (SEH), sujeta a _When_ las condiciones _On_failure_ y . Para obtener más información, vea Especificar cuándo y dónde se aplica una anotación. |
_Maybe_raises_SEH_exception_ |
Anota una función que, opcionalmente, puede generar una excepción SEH, sujeta a _When_ las condiciones _On_failure_ y . |
_Must_inspect_result_ |
Anota cualquier valor de salida, incluidos el valor devuelto, los parámetros y los valores globales. El analizador notifica un error si el valor del objeto anotado no se inspecciona posteriormente. "Inspección" incluye si se usa en una expresión condicional, se asigna a un parámetro de salida o global, o se pasa como parámetro. Para los valores _Must_inspect_result_ devueltos, implica _Check_return_ . |
_Use_decl_annotations_ |
Se puede usar en una definición de función (también conocida como cuerpo de función) en lugar de la lista de anotaciones del encabezado. Cuando se usa , las anotaciones que aparecen en un encabezado en el ámbito para la misma función se usan como si también se hubieran presente en la definición que _Use_decl_annotations_ tiene la _Use_decl_annotations_ anotación. |
Anotaciones correctas o con errores
Una función puede producir un error y, cuando lo hace, sus resultados pueden estar incompletos o diferir de los resultados cuando la función se realiza correctamente. Las anotaciones de la lista siguiente proporcionan maneras de expresar el comportamiento de error. Para usar estas anotaciones, debe habilitarlas para determinar si son correctas; por lo tanto, _Success_ se requiere una anotación. Observe que y ya tienen una anotación integrada; sin embargo, si especifica su propia anotación en o , invalida la NTSTATUSHRESULT_Success__Success_NTSTATUSHRESULT anotación integrada.
| Anotación | Descripción |
|---|---|
_Always_(anno_list) |
Equivalente a anno_list _On_failure_(anno_list) ; es decir, las anotaciones de anno_list se aplican tanto si la función se realiza correctamente como si no. |
_On_failure_(anno_list) |
Para usarse solo cuando también se usa para anotar la función, ya sea explícita o implícitamente a _Success_ través de en una _Return_type_success_ definición de tipo. Cuando la anotación está presente en un parámetro de función o en un valor devuelto, cada anotación de (anno) se comporta como si se hubiera codificado como , donde es el parámetro de la _On_failure_anno_list_When_(!expr, anno)expr anotación _Success_ necesaria. Esto significa que la aplicación implícita de _Success_ a todas las condiciones posteriores no se aplica a _On_failure_ . |
_Return_type_success_(expr) |
Se puede aplicar a una definición de tipo. Indica que todas las funciones que devuelven ese tipo y no tienen explícitamente se anotan _Success_ como si tuvieran _Success_(expr) . _Return_type_success_ no se puede usar en una función o en una definición de tipo de puntero de función. |
_Success_(expr) |
expr es una expresión que produce un valor R. Cuando la anotación está presente en una declaración o definición de función, cada anotación ( ) de la función y en la condición posterior se comporta como si se hubiera _Success_anno codificado como _When_(expr, anno) . La _Success_ anotación solo se puede usar en una función, no en sus parámetros ni en el tipo de valor devuelto. Puede haber como máximo una _Success_ anotación en una función y no puede estar en _When_ , o _At__Group_ . Para obtener más información, vea Especificar cuándo y dónde se aplica una anotación. |
Vea también
- Utilizar anotaciones SAL para reducir defectos de código de C/C++
- Introducción a SAL
- Anotar parámetros de función y valores devueltos
- Anotar structs y clases
- Anotar comportamiento de bloqueo
- Especificar cuándo y dónde se aplica una anotación
- Funciones intrínsecas
- Procedimientos recomendados y ejemplos