Udostępnij przez


Dodawanie adnotacji do zachowania funkcji

Oprócz dodawania adnotacji do parametrów funkcji i zwracanych wartości można dodawać adnotacje do właściwości całej funkcji.

Adnotacje funkcji

Poniższe adnotacje mają zastosowanie do funkcji jako całości i opisują, jak się zachowuje lub czego oczekuje się od niej.

Adnotacja opis
_Called_from_function_class_(name) Nie zamierza się stać sam; Zamiast tego jest to predykat, który ma być używany z adnotacją _When_ . Aby uzyskać więcej informacji, zobacz Określanie, kiedy i gdzie ma zastosowanie adnotacja.

Parametr name jest dowolnym ciągiem, który również pojawia się w adnotacji w _Function_class_ deklaracji niektórych funkcji. _Called_from_function_class_ Zwraca wartość niezerową, jeśli funkcja, która jest obecnie analizowana, jest oznaczona adnotacją przy użyciu _Function_class_ tej samej wartości name; w przeciwnym razie zwraca zero.
_Check_return_ Donotuje wartość zwracaną i stwierdza, że obiekt wywołujący powinien go sprawdzić. Kontroler zgłasza błąd, jeśli funkcja jest wywoływana w kontekście pustki.
_Function_class_(name) Parametr name jest dowolnym ciągiem wyznaczonym przez użytkownika. Istnieje w przestrzeni nazw, która różni się od innych przestrzeni nazw. Funkcja, wskaźnik funkcji lub — co najbardziej przydatne — typ wskaźnika funkcji może być wyznaczony jako należący do jednej lub większej liczby klas funkcji.
_Raises_SEH_exception_ Dodawać adnotacje do funkcji, która zawsze zgłasza wyjątek programu obsługi wyjątków strukturalnych (SEH, structured exception handler, SEH), z zastrzeżeniem _When_ warunków i _On_failure_ . Aby uzyskać więcej informacji, zobacz Określanie, kiedy i gdzie ma zastosowanie adnotacja.
_Maybe_raises_SEH_exception_ Dodawać adnotacje do funkcji, która może opcjonalnie zgłaszać wyjątek SEH, z zastrzeżeniem _When_ warunków i _On_failure_ .
_Must_inspect_result_ Dodawać adnotacje do wszystkich wartości wyjściowych, w tym wartość zwracaną, parametry i wartości globalne. Analizator zgłasza błąd, jeśli wartość w obiekcie z adnotacjami nie jest następnie sprawdzana. "Inspekcja" obejmuje, czy jest używany w wyrażeniu warunkowym, jest przypisywany do parametru wyjściowego lub globalnego, czy jest przekazywany jako parametr. W przypadku wartości _Must_inspect_result_ zwracanych oznacza wartość _Check_return_.
_Use_decl_annotations_ Może być używana w definicji funkcji (znanej również jako treść funkcji) zamiast listy adnotacji w nagłówku. Gdy _Use_decl_annotations_ jest używany, adnotacje, które pojawiają się w nagłówku w zakresie dla tej samej funkcji, są używane tak, jakby były również obecne w definicji zawierającej adnotację _Use_decl_annotations_ .

Adnotacje powodzenia/niepowodzenia

Funkcja może zakończyć się niepowodzeniem, a gdy to zrobi, jej wyniki mogą być niekompletne lub różnić się od wyników po pomyślnym zakończeniu działania funkcji. Adnotacje na poniższej liście zawierają sposoby wyrażania zachowania błędów. Aby użyć tych adnotacji, należy je włączyć, aby określić powodzenie; dlatego wymagana jest adnotacja _Success_ . Zwróć uwagę, że NTSTATUS adnotacja jest HRESULT już wbudowana. Jeśli jednak określisz własną _Success__Success_ adnotację w NTSTATUS elemecie lub HRESULT, zastępuje ona wbudowaną adnotację.

Adnotacja opis
_Always_(anno_list) anno_list _On_failure_(anno_list)Odpowiednik ; oznacza to, że adnotacje w anno_list elemencie mają zastosowanie, czy funkcja powiedzie się.
_On_failure_(anno_list) Do użycia tylko wtedy, gdy _Success_ jest również używany do dodawania adnotacji do funkcji — jawnie lub niejawnie za pomocą _Return_type_success_ definicji typu. Gdy adnotacja _On_failure_ jest obecna w parametrze funkcji lub zwracanej wartości, każda adnotacja w anno_list (adnotacji) zachowuje się tak, jakby została zakodowana jako _When_(!expr, anno), gdzie expr jest parametrem wymaganej _Success_ adnotacji. Oznacza to, że dorozumiane zastosowanie do wszystkich warunków końcowych _Success_ nie ma zastosowania do _On_failure_.
_Return_type_success_(expr) Można zastosować do definicji typów. Wskazuje, że wszystkie funkcje zwracające ten typ i nie mają _Success_ jawnie adnotacji tak, jakby miały _Success_(expr)wartość . _Return_type_success_ nie można używać w funkcji lub w definicji typu wskaźnika funkcji.
_Success_(expr) expr to wyrażenie, które zwraca wartość rvalue. Gdy adnotacja _Success_ jest obecna w deklaracji funkcji lub definicji, każda adnotacja (anno) w funkcji i w warunku po nim zachowuje się tak, jakby został zakodowany jako _When_(expr, anno). Adnotacja _Success_ może być używana tylko w funkcji, a nie w parametrach lub zwracanym typie. W funkcji może znajdować się co najwyżej jedna _Success_ adnotacja i nie może być w żadnej _When_funkcji , _At_lub _Group_. Aby uzyskać więcej informacji, zobacz Określanie, kiedy i gdzie ma zastosowanie adnotacja.

Zobacz też