Funciones intrínsecas

Una expresión en SAL puede ser una expresión de C/C++ siempre que sea una expresión que no tenga efectos secundarios; por ejemplo, ++, --, y llamadas de función tienen efectos secundarios en este contexto. Sin embargo, SAL proporciona algunos objetos similares a funciones y algunos símbolos reservados que se pueden usar en expresiones SAL. Estos se conocen como funciones intrínsecas.

Uso general

Las siguientes anotaciones de función instrínseca proporcionan utilidad general para SAL.

Annotation Descripción
_Curr_ Sinónimo del objeto que se anota actualmente. Cuando la anotación _At_ está en uso, _Curr_ es igual que el primer parámetro para _At_. De lo contrario, es el parámetro o la función entera/valor devuelto con los que la anotación está asociada léxicamente.
_Inexpressible_(expr) Expresa una situación en la que el tamaño de un búfer es demasiado complejo para representar mediante una expresión de anotación; por ejemplo, cuando se calcula mediante el examen de un conjunto de datos de entrada y, luego, se cuentan los miembros seleccionados.
_Nullterm_length_(param) param es el número de elementos del búfer hasta un terminador NULL (sin incluir este). Se puede aplicar a cualquier búfer de tipo no agregado y no nulo.
_Old_(expr) Cuando se evalúa en condición previa, _Old_ devuelve el valor de entrada expr. Cuando se evalúa en condición previa, devuelve el valor expr como se habría evaluado en la condición previa.
_Param_(n) El parámetro nth a una función, contando desde 1 hasta n, y n es una constante integral literal. Si se nombra el parámetro, esta anotación es idéntica a acceder al parámetro por nombre. Nota:n Puede hacer referencia a los parámetros posicionales definidos por puntos suspensivos o se pueden usar en prototipos de función en los que no se usan nombres.
return La palabra clave reservada de C/C++ return se puede usar en una expresión SAL para indicar el valor devuelto de una función. El valor solo está disponible en estado posterior; es un error de sintaxis usarlo en estado previo.

Cadena específica

Las siguientes anotaciones de función intrínseca permiten la manipulación de cadenas. Estas cuatro funciones tienen el mismo propósito: devolver el número de elementos del tipo que se encuentra delante de un terminador NULL. Las diferencias son los tipos de datos de los elementos a los que se hace referencia. Tenga en cuenta que si quiere especificar la longitud de un búfer terminado en NULL que no esté compuesto de caracteres, debe usar la anotación _Nullterm_length_(param) de la sección anterior.

Annotation Descripción
_String_length_(param) param es el número de elementos de la cadena hasta un terminador NULL (sin incluir este). Esta anotación está reservada para tipos de cadena de caracteres.
strlen(param) param es el número de elementos de la cadena hasta un terminador NULL (sin incluir este). Esta anotación está reservada para su uso en matrices de caracteres y es similar a la función strlen() del entorno de ejecución de C.
wcslen(param) param es el número de elementos de la cadena hasta un terminador NULL (sin incluir este). Esta anotación está reservada para su uso en matrices de caracteres anchos y recuerda a la función en tiempo de ejecución de C wcslen().

Consulte también