Funkcje wewnętrzne

Wyrażenie w sal może być wyrażeniem C/C++, pod warunkiem, że jest to wyrażenie, które nie ma efektów ubocznych — na przykład ++, --, i wywołania funkcji mają skutki uboczne w tym kontekście. Jednak sal zapewnia niektóre obiekty podobne do funkcji i niektóre zastrzeżone symbole, które mogą być używane w wyrażeniach SAL. Są one określane jako funkcje wewnętrzne.

Ogólnego przeznaczenia

Następujące adnotacje funkcji instrynacji zapewniają ogólne narzędzie dla SAL.

Adnotacja opis
_Curr_ Synonim obiektu, który jest obecnie adnotacją. Gdy adnotacja _At_ jest używana, _Curr_ jest taka sama jak pierwszy parametr do _At_. W przeciwnym razie jest to parametr lub cała funkcja/wartość zwracana, z którą adnotacja jest skojarzona leksykalnie.
_Inexpressible_(expr) Wyraża sytuację, w której rozmiar buforu jest zbyt złożony do reprezentowania przy użyciu wyrażenia adnotacji — na przykład w przypadku obliczenia przez skanowanie wejściowego zestawu danych, a następnie zliczanie wybranych elementów członkowskich.
_Nullterm_length_(param) param jest liczbą elementów w buforze do, ale nie zawiera separatora wartości null. Można go zastosować do dowolnego buforu typu niegregowanego, niepustego.
_Old_(expr) Gdy jest obliczana w warunku wstępnym, _Old_ zwraca wartość exprwejściową . Gdy jest obliczana w warunku po, zwraca wartość expr , tak jak zostałaby obliczona w warunku wstępnym.
_Param_(n) Ten nparametr do funkcji, licząc od 1 do n, i n jest literału stałą całkowitą. Jeśli parametr ma nazwę, ta adnotacja jest identyczna z dostępem do parametru według nazwy. Uwaga:n może odwoływać się do parametrów pozycyjnych zdefiniowanych przez wielokropek lub mogą być używane w prototypach funkcji, w których nazwy nie są używane.
return Zastrzeżone słowo kluczowe return C/C++ można użyć w wyrażeniu SAL, aby wskazać wartość zwracaną funkcji. Wartość jest dostępna tylko w stanie post; jest to błąd składniowy, który ma być używany w stanie wstępnym.

Specyficzne dla ciągu

Następujące adnotacje funkcji wewnętrznej umożliwiają manipulowanie ciągami. Wszystkie cztery z tych funkcji mają ten sam cel: aby zwrócić liczbę elementów typu znalezionych przed terminatorem o wartości null. Różnice są rodzajami danych w elementach, do których się odwołujesz. Należy pamiętać, że jeśli chcesz określić długość buforu zakończonego wartością null, który nie składa się z znaków, użyj _Nullterm_length_(param) adnotacji z poprzedniej sekcji.

Adnotacja opis
_String_length_(param) param jest liczbą elementów w ciągu do, ale nie zawiera separatora wartości null. Ta adnotacja jest zarezerwowana dla typów ciągów znaków.
strlen(param) param jest liczbą elementów w ciągu do, ale nie zawiera separatora wartości null. Ta adnotacja jest zarezerwowana do użycia w tablicach znaków i przypomina funkcję środowiska uruchomieniowego języka C strlen().
wcslen(param) param jest liczbą elementów w ciągu maksymalnie (ale nie w tym) terminatorem o wartości null. Ta adnotacja jest zarezerwowana do użycia w tablicach znaków szerokich i przypomina funkcję środowiska uruchomieniowego języka C wcslen().

Zobacz też