Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A struktúrák és az osztálytagok annotálhatók olyan annotációkkal, amelyek invariánsként működnek – ezek feltételezhetően igazak bármely függvényhívás alkalmával vagy függvény belépésénél/kilépésénél, ahol a struktúrát paraméterként vagy visszatérési értékként használják.
Szerkezet- és osztályjegyzetek
_Field_range_(low, high)A mező a
lowéshighközötti tartományon belül van, beleértve az értékeket is. Egyenértékű a_Satisfies_(_Curr_ >= low && _Curr_ <= high)jegyzetekkel ellátott objektumra a megfelelő elő- vagy utófeltételek használatával._Field_size_(size),_Field_size_opt_(size),_Field_size_bytes_(size)_Field_size_bytes_opt_(size)Olyan mező, amelynek írható mérete az elemekben (vagy bájtokban) a megadottak szerint
sizevan megadva._Field_size_part_(size, count),_Field_size_part_opt_(size, count),_Field_size_bytes_part_(size, count)_Field_size_bytes_part_opt_(size, count)Olyan mező, amelynek mérete elemekben (vagy bájtokban) az alapján írható, ahogyan az a
sizevan meghatározva, valamint amelycountelemek (bájtok) olvashatóak._Field_size_full_(size),_Field_size_full_opt_(size),_Field_size_bytes_full_(size)_Field_size_bytes_full_opt_(size)Olyan mező, amely az
sizeáltal megadott elemekben (vagy bájtokban) olvasható és írható méretű._Field_z_Null értékű sztringgel rendelkező mező.
_Struct_size_bytes_(size)A szerkezetre vagy osztálydeklarációra vonatkozik. Azt jelzi, hogy egy érvényes objektum ebből a típusból nagyobb lehet a deklarált típusnál, a bájtok számát pedig a megadott
sizehatározza meg. Például:typedef _Struct_size_bytes_(nSize) struct MyStruct { size_t nSize; ... };A paraméter
pMbájtban kifejezett puffer mérete aMyStruct *típushoz a következő:min(pM->nSize, sizeof(MyStruct))
példa
#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
};
A példához tartozó megjegyzések:
-
_Field_z_egyenértékű a .-nak._Null_terminated__Field_z_mező azt jelzi, hogy a név egy nullával lezárt karakterlánc. -
_Field_range_abufferSizebeállítás azt határozza meg, hogy az értéknekbufferSizeaz 1-es ésMaxBufferSizea (mindkettőt is magában foglaló) értéken belül kell lennie. - A széljegyzetek és
_Struct_size_bytes_a_Field_size_széljegyzetek végeredménye egyenértékű. A hasonló elrendezésű_Field_size_struktúrák vagy osztályok könnyebben olvashatók és karbantarthatók, mivel kevesebb hivatkozással és számítással rendelkezik, mint a megfelelő_Struct_size_bytes_széljegyzet._Field_size_nincs szükség a bájtméretre való átalakításra. Ha a bájtméret az egyetlen lehetőség, például üres mutató mező esetén használható_Field_size_bytes_. Ha mind a_Struct_size_bytes_és a_Field_size_létezik, mindkettő elérhető lesz az eszközök számára. Az eszközön múlik, hogy mi a teendő, ha a két jelölés nem egyezik meg.
Lásd még
- C/C++ kódhibák csökkentése SAL-széljegyzetek használatával
- A SAL ismertetése
- Függvényparaméterek és visszatérési értékek megjegyzése
- A függvény viselkedésének megjegyzésekkel való ellátása
- A zárolási viselkedés megjegyzésekkel való ellátása
- Meghatározhatja, hogy mikor és hol alkalmazandó egy megjegyzés
- Belső függvények
- Ajánlott eljárások és példák