Określanie warunków pojawiania się adnotacji
Gdy adnotacja jest warunkowa, może wymagać innych adnotacji, aby określić je do analizatora. Jeśli na przykład funkcja ma zmienną, która może być synchroniczna lub asynchroniczna, funkcja zachowuje się w następujący sposób: w przypadku synchronicznym zawsze kończy się powodzeniem, ale w przypadku asynchronicznym zgłasza błąd, jeśli nie może natychmiast zakończyć się powodzeniem. Gdy funkcja jest wywoływana synchronicznie, sprawdzanie wartości wyniku nie daje żadnej wartości analizatorowi kodu, ponieważ nie zostałoby zwrócone. Jeśli jednak funkcja jest wywoływana asynchronicznie, a wynik funkcji nie jest sprawdzany, może wystąpić poważny błąd. W tym przykładzie pokazano sytuację, w której można użyć _When_
adnotacji — opisanej w dalszej części tego artykułu — w celu włączenia sprawdzania.
Adnotacje strukturalne
Aby kontrolować, kiedy i gdzie mają zastosowanie adnotacje, użyj następujących adnotacji strukturalnych.
Adnotacja | opis |
---|---|
_At_(expr, anno-list) |
expr jest wyrażeniem, które zwraca wartość lvalue. Adnotacje w pliku anno-list są stosowane do obiektu o nazwie .expr Dla każdej adnotacji w elemecie anno-list expr element jest interpretowany w warunku wstępnym, jeśli adnotacja jest interpretowana w warunku wstępnym i w warunku po zakończeniu, jeśli adnotacja jest interpretowana w warunku po. |
_At_buffer_(expr, iter, elem-count, anno-list) |
expr jest wyrażeniem, które zwraca wartość lvalue. Adnotacje w pliku anno-list są stosowane do obiektu o nazwie .expr Dla każdej adnotacji w elemecie anno-list expr element jest interpretowany w warunku wstępnym, jeśli adnotacja jest interpretowana w warunku wstępnym, a po warunku, jeśli adnotacja jest interpretowana w warunku po.iter to nazwa zmiennej, która jest ograniczona do adnotacji (włącznie z anno-list ). iter ma typ long niejawny . Identycznie nazwane zmienne w dowolnym otaczającym zakresie są ukryte przed oceną.elem-count jest wyrażeniem, które oblicza liczbę całkowitą. |
_Group_(anno-list) |
Adnotacje w elemecie anno-list są uznawane za wszelkie kwalifikator, który ma zastosowanie do adnotacji grupy, która jest stosowana do każdej adnotacji. |
_When_(expr, anno-list) |
expr to wyrażenie, które można przekonwertować na bool . Jeśli nie ma wartości zero (true ), adnotacje określone w elemecie anno-list są uznawane za odpowiednie.Domyślnie dla każdej adnotacji w elemecie anno-list expr jest interpretowana jako użycie wartości wejściowych, jeśli adnotacja jest warunkiem wstępnym, i jako użycie wartości wyjściowych, jeśli adnotacja jest warunkiem po. Aby zastąpić wartość domyślną, możesz użyć _Old_ funkcji wewnętrznej podczas oceny warunku po, aby wskazać, że należy użyć wartości wejściowych. Uwaga: Różne adnotacje mogą być włączone w konsekwencji użycia _When_ , jeśli wartość modyfikowalna — na przykład — jest zaangażowana, *pLength ponieważ obliczony wynik warunku wstępnego może różnić się od ocenianego expr wyniku po warunku. |
Zobacz też
- Korzystanie z adnotacji SAL w celu zmniejszenia liczby defektów kodu C/C++
- Informacje o języku SAL
- Dodawanie adnotacji do parametrów funkcji i zwracanych wartości
- Zachowanie funkcji dodawania adnotacji
- Dodawanie adnotacji do struktur i klas
- Dodawanie adnotacji do zachowania blokującego
- Funkcje wewnętrzne
- Najlepsze rozwiązania i przykłady