Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt aantekeningen maken voor struct- en klasseleden door aantekeningen te gebruiken die fungeren als invarianten - ze worden verondersteld waar te zijn bij elke functieaanroep of functietoegang/-uitgang waarbij de omliggende structuur betrokken is als parameter of als resultaatwaarde.
Struct- en klasseaantekeningen
_Field_range_(low, high)Het veld bevindt zich in het bereik (inclusief) van
lowtothigh. Equivalent aan_Satisfies_(_Curr_ >= low && _Curr_ <= high)toegepast op het geannoteerde object met behulp van de juiste pre- of postvoorwaarden._Field_size_(size),_Field_size_opt_(size),_Field_size_bytes_(size),_Field_size_bytes_opt_(size)Een veld met een schrijfbare grootte in elementen (of bytes) zoals opgegeven door
size._Field_size_part_(size, count),_Field_size_part_opt_(size, count),_Field_size_bytes_part_(size, count),_Field_size_bytes_part_opt_(size, count)Een veld met een schrijfbare grootte in elementen (of bytes) zoals opgegeven door
size, en decountelementen (bytes) die leesbaar zijn._Field_size_full_(size),_Field_size_full_opt_(size),_Field_size_bytes_full_(size),_Field_size_bytes_full_opt_(size)Een veld met zowel leesbare als schrijfbare grootte in elementen (of bytes) zoals opgegeven door
size._Field_z_Een veld met een door null beƫindigde tekenreeks.
_Struct_size_bytes_(size)Van toepassing op struct- of klassedeclaratie. Geeft aan dat een geldig object van dat type mogelijk groter kan zijn dan het gedeclareerde type, waarbij het aantal bytes wordt gespecificeerd door
size. Voorbeeld:typedef _Struct_size_bytes_(nSize) struct MyStruct { size_t nSize; ... };De buffergrootte in bytes van een parameter
pMvan het typeMyStruct *wordt vervolgens als volgt beschouwd:min(pM->nSize, sizeof(MyStruct))
Voorbeeld
#include <sal.h>
// This _Struct_size_bytes_ is equivalent to what below _Field_size_ means.
_Struct_size_bytes_(__builtin_offsetof(MyBuffer, buffer) + bufferSize * sizeof(int))
struct MyBuffer
{
static int MaxBufferSize;
_Field_z_
const char* name;
int firstField;
// ... other fields
_Field_range_(1, MaxBufferSize)
int bufferSize;
_Field_size_(bufferSize) // Preferred way - easier to read and maintain.
int buffer[]; // Using C99 Flexible array member
};
Opmerkingen voor dit voorbeeld:
-
_Field_z_is equivalent aan_Null_terminated_._Field_z_voor het naamveld geeft aan dat het naamveld een null-beƫindigde tekenreeks is. -
_Field_range_geeftbufferSizeaan dat de waarde vanbufferSizetussen 1 enMaxBufferSizeinclusief beide moet zijn. - De eindresultaten van de
_Struct_size_bytes_en_Field_size_aantekeningen zijn gelijkwaardig. Voor structuren of klassen met een vergelijkbare indeling is het gemakkelijker te lezen en te onderhouden,_Field_size_omdat deze minder verwijzingen en berekeningen heeft dan de equivalente_Struct_size_bytes_aantekening._Field_size_vereist geen conversie naar de bytegrootte. Als bytegrootte de enige optie is, bijvoorbeeld voor een veld met ongeldige aanwijzer,_Field_size_bytes_kan worden gebruikt. Als_Struct_size_bytes_en_Field_size_allebei bestaan, zijn ze beschikbaar voor hulpprogramma's. Het is aan de tool wat te doen als de twee aantekeningen het niet eens zijn.
Zie ook
- SAL-aantekeningen gebruiken om C/C++ codefouten te verminderen
- Informatie over SAL
- Aantekeningen toevoegen aan functieparameters en retourwaarden
- Aantekeningen toevoegen aan functiegedrag
- Het annoteren van vergrendelingsgedrag
- opgeven wanneer en waar een aantekening van toepassing is
- Intrinsieke functies
- Aanbevolen procedures en voorbeelden