Sdílet prostřednictvím


Poznámky záhlaví

[Toto téma popisuje poznámky podporované v záhlavích Windows prostřednictvím Windows 7. Pokud vyvíjíte pro Windows 8, měli byste použít poznámky popsané v poznámkách SAL.]

Poznámky záhlaví popisují, jak funkce používá parametry a návratovou hodnotu. Tyto poznámky byly přidány do mnoha souborů hlaviček Systému Windows, které vám pomůžou zajistit správné volání rozhraní API systému Windows. Pokud povolíte analýzu kódu, která je dostupná od sady Visual Studio 2005, kompilátor vygeneruje upozornění na úroveň 6000, pokud tyto funkce nevoláte podle použití popsaného prostřednictvím poznámek. Tyto poznámky můžete také přidat do vlastního kódu, abyste měli jistotu, že se volá správně. Pokud chcete povolit analýzu kódu v sadě Visual Studio, přečtěte si dokumentaci k vaší verzi sady Visual Studio.

Tyto poznámky jsou definovány v sadě Specstrings.h. Jsou postaveny na primitivech, které jsou součástí standardnotační jazyk (SAL) a implementované pomocí _declspec("SAL_*").

Existují dvě třídy poznámek: poznámky vyrovnávací paměti a pokročilé poznámky.

Poznámky vyrovnávací paměti

Poznámky vyrovnávací paměti popisují, jak funkce používají své ukazatele a lze je použít k detekci přetečení vyrovnávací paměti. Každý parametr může používat nulovou nebo jednu poznámku vyrovnávací paměti. Poznámka vyrovnávací paměti se vytvoří s úvodním podtržítkem a komponentami popsanými v následujících částech.

Velikost vyrovnávací paměti Popis
(velikost)
Určuje celkovou velikost vyrovnávací paměti. Použití s _bcount a _ecount; nepoužívejte s _part. Tato hodnota je přístupný prostor; může být menší než přidělený prostor.
(velikost,délka)
Určuje celkovou velikost a inicializovanou délku vyrovnávací paměti. Používá se s _bcount_part a _ecount_part. Celková velikost může být menší než přidělený prostor.
Jednotky velikosti vyrovnávací paměti Popis
_bcount
Velikost vyrovnávací paměti je v bajtech.
_ecount
Velikost vyrovnávací paměti je v elementech.
Směr Popis
_in
Funkce čte z vyrovnávací paměti. Volající poskytuje vyrovnávací paměť a inicializuje ji.
_inout
Funkce čte z vyrovnávací paměti i zápisy do vyrovnávací paměti. Volající poskytuje vyrovnávací paměť a inicializuje ji. Pokud se používá s _deref, může být vyrovnávací paměť relokována funkcí.
_out
Funkce zapisuje do vyrovnávací paměti. Pokud se použije na návratové hodnotě nebo s _deref, funkce poskytne vyrovnávací paměť a inicializuje ji. V opačném případě volající poskytne vyrovnávací paměť a funkce ji inicializuje.
Bezcílnost Popis
_deref
Dereference parametr získat ukazatel vyrovnávací paměti. Tento parametr nemusí být null.
_deref_opt
Dereference parametr získat ukazatel vyrovnávací paměti. Tento parametr může být null.
Inicializace Popis
_full
Funkce inicializuje celou vyrovnávací paměť. Používejte pouze s výstupními vyrovnávacími paměťmi.
_part
Funkce inicializuje část vyrovnávací paměti a explicitně určuje, kolik. Používejte pouze s výstupními vyrovnávacími paměťmi.
Povinná nebo volitelná vyrovnávací paměť Popis
_opt
Tento parametr může být null.

Následující příklad ukazuje poznámky pro GetModuleFileName funkce. Parametr hModule je volitelný vstupní parametr . Parametr lpFilename je výstupní parametr; jeho velikost v znacích je určena parametrem nSize a jeho délka zahrnuje null-ukončovací znak. Parametr nSize je vstupní parametr.

DWORD
WINAPI
GetModuleFileName(
    __in_opt HMODULE hModule,
    __out_ecount_part(nSize, return + 1) LPTSTR lpFilename,
    __in DWORD nSize
    );

Níže jsou uvedené poznámky definované v části Specstrings.h. Pomocí informací v tabulkách výše můžete interpretovat jejich význam.

__bcount( velikost)
__bcount_opt( velikost)
__deref_bcount(velikost)
__deref_bcount_opt(velikost)
__deref_ecount( velikost)
__deref_ecount_opt(velikost)
__deref_in
__deref_in_bcount( velikost)
__deref_in_bcount_opt(velikost)
__deref_in_ecount(velikost)
__deref_in_ecount_opt(velikost)
__deref_in_opt
__deref_inout
__deref_inout_bcount( velikost)
__deref_inout_bcount_full(velikost)
__deref_inout_bcount_full_opt(velikost)
__deref_inout_bcount_opt( velikost)
__deref_inout_bcount_part(velikost, délka)
__deref_inout_bcount_part_opt(velikost, délka)
__deref_inout_ecount(velikost)
__deref_inout_ecount_full(velikost)
__deref_inout_ecount_full_opt(velikost)
__deref_inout_ecount_opt(velikost)
__deref_inout_ecount_part(velikost,délka)
__deref_inout_ecount_part_opt(velikost,délka)
__deref_inout_opt
__deref_opt_bcount(velikost)
__deref_opt_bcount_opt(velikost)
__deref_opt_ecount(velikost)
__deref_opt_ecount_opt( velikost)
__deref_opt_in
__deref_opt_in_bcount( velikost)
__deref_opt_in_bcount_opt(velikost)
__deref_opt_in_ecount(velikost)
__deref_opt_in_ecount_opt(velikost)
__deref_opt_in_opt
__deref_opt_inout
__deref_opt_inout_bcount( velikost)
__deref_opt_inout_bcount_full( velikost)
__deref_opt_inout_bcount_full_opt( velikost)
__deref_opt_inout_bcount_opt(velikost)
__deref_opt_inout_bcount_part(velikost,délka)
__deref_opt_inout_bcount_part_opt(velikost,délka)
__deref_opt_inout_ecount(velikost)
__deref_opt_inout_ecount_full(velikost)
__deref_opt_inout_ecount_full_opt( velikost)
__deref_opt_inout_ecount_opt( velikost)
__deref_opt_inout_ecount_part(velikost,délka)
__deref_opt_inout_ecount_part_opt(velikost,délka)
__deref_opt_inout_opt
__deref_opt_out
__deref_opt_out_bcount( velikost)
__deref_opt_out_bcount_full(velikost)
__deref_opt_out_bcount_full_opt( velikost)
__deref_opt_out_bcount_opt(velikost)
__deref_opt_out_bcount_part(velikost,délka)
__deref_opt_out_bcount_part_opt(velikost,délka)
__deref_opt_out_ecount(velikost)
__deref_opt_out_ecount_full( velikost)
__deref_opt_out_ecount_full_opt(velikost)
__deref_opt_out_ecount_opt( velikost)
__deref_opt_out_ecount_part(velikost,délka)
__deref_opt_out_ecount_part_opt(velikost,délka)
__deref_opt_out_opt
__deref_out
__deref_out_bcount( velikost)
__deref_out_bcount_full( velikost)
__deref_out_bcount_full_opt(velikost)
__deref_out_bcount_opt( velikost)
__deref_out_bcount_part(velikost,délka)
__deref_out_bcount_part_opt(velikost,délka)
__deref_out_ecount(velikost)
__deref_out_ecount_full(velikost)
__deref_out_ecount_full_opt( velikost)
__deref_out_ecount_opt( velikost)
__deref_out_ecount_part(velikost,délka)
__deref_out_ecount_part_opt(velikost,délka)
__deref_out_opt
__ecount(velikost)
__ecount_opt(velikost)
__v
__in_bcount(velikost)
__in_bcount_opt(velikost)
__in_ecount( velikost)
__in_ecount_opt(velikost)
__in_opt
__inout
__inout_bcount(velikost)
__inout_bcount_full( velikost)
__inout_bcount_full_opt(velikost)
__inout_bcount_opt(velikost)
__inout_bcount_part(velikost,délka)
__inout_bcount_part_opt(velikost,délka)
__inout_ecount( velikost)
__inout_ecount_full(velikost)
__inout_ecount_full_opt(velikost)
__inout_ecount_opt(velikost)
__inout_ecount_part(velikost,délka)
__inout_ecount_part_opt(velikost,délka)
__inout_opt
__ven
__out_bcount(velikost)
__out_bcount_full( velikost)
__out_bcount_full_opt(velikost)
__out_bcount_opt( velikost)
__out_bcount_part(velikost,délka)
__out_bcount_part_opt(velikost,délka)
__out_ecount( velikost)
__out_ecount_full( velikost)
__out_ecount_full_opt( velikost)
__out_ecount_opt(velikost)
__out_ecount_part(velikost, délka)
__out_ecount_part_opt(velikost,délka)
__out_opt

Rozšířené poznámky

Rozšířené poznámky poskytují další informace o parametru nebo návratové hodnotě. Každý parametr nebo návratová hodnota může používat nulovou nebo jednu pokročilou poznámku.

Anotace Popis
__blocksOn(prostředek)
Funkce blokuje zadaný prostředek.
__callback
Funkci lze použít jako ukazatel funkce.
__checkReturn
Volající musí zkontrolovat vrácenou hodnotu.
__format_string
Parametr je řetězec, který obsahuje značky % ve stylu printf.
__in_awcount(výraz,velikost)
Pokud je výraz při ukončení pravdivý, velikost vstupní vyrovnávací paměti je určena v bajtech. Pokud je výraz false, velikost je zadána v prvcích.
__nullnullterminated
Vyrovnávací paměť může být přístupná až do první sekvence dvou null znaků nebo ukazatelů.
__nullterminated
Vyrovnávací paměť může být přístupná až do prvního null znaku nebo ukazatele.
__out_awcount(výraz,velikost)
Pokud je výraz při ukončení pravdivý, velikost výstupní vyrovnávací paměti je určena v bajtech. Pokud je výraz false, velikost je zadána v prvcích.
__override
Určuje chování přepsání ve stylu C#u virtuálních metod.
__reserved
Parametr je vyhrazen pro budoucí použití a musí být nulový nebo NULL.
__success(výraz)
Pokud je výraz při ukončení pravdivý, volající může spoléhat na všechny záruky určené jinými poznámkami. Pokud je výraz nepravda, volající nemůže spoléhat na záruky. Tato poznámka se automaticky přidá do funkcí, které vrátí hodnotu HRESULT.
__typefix(ctype)
Zachází s parametrem jako se zadaným typem, nikoli s deklarovaným typem.

Následující příklady ukazují vyrovnávací paměť a pokročilé poznámky pro DeleteTimerQueueTimer, FreeEnvironmentStringsa UnhandledExceptionFilter funkcí.

__checkReturn
BOOL
WINAPI
DeleteTimerQueueTimer(
    __in_opt HANDLE TimerQueue,
    __in     HANDLE Timer,
    __in_opt HANDLE CompletionEvent
    );

BOOL
WINAPI
FreeEnvironmentStrings(
    __in __nullnullterminated LPTCH
    );

__callback
LONG
WINAPI
UnhandledExceptionFilter(
    __in struct _EXCEPTION_POINTERS *ExceptionInfo
    );

poznámky SAL

Návod: Analýza kódu C/C++ pro vady