Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Du kan kommentera struct- och klassmedlemmar med hjälp av anteckningar som fungerar som invarianter – de antas vara sanna vid valfritt funktionsanrop eller funktionsinmatning/-utgång som omfattar den omslutande strukturen som en parameter eller ett resultatvärde.
Struct- och klassannoteringar
_Field_range_(low, high)Fältet finns i intervallet (inklusive) från
lowtillhigh. Motsvarar_Satisfies_(_Curr_ >= low && _Curr_ <= high)applicerat på det annoterade objektet genom att använda lämpliga villkor före eller efter._Field_size_(size),_Field_size_opt_(size), ,_Field_size_bytes_(size)_Field_size_bytes_opt_(size)Ett fält som har en skrivbar storlek i element (eller byte) som anges av
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)Ett fält som har en skrivbar storlek i element (eller byte) enligt vad som anges av
size, och decountav de elementen (byte) som är läsbara._Field_size_full_(size),_Field_size_full_opt_(size), ,_Field_size_bytes_full_(size)_Field_size_bytes_full_opt_(size)Ett fält som har både läsbar och skrivbar storlek i element (eller byte) enligt
size._Field_z_Ett fält som har en null-avslutad sträng.
_Struct_size_bytes_(size)Gäller för struktur- eller klassdeklaration. Anger att ett giltigt objekt av den typen kan vara större än den deklarerade typen, med antalet byte som anges av
size. Till exempel:typedef _Struct_size_bytes_(nSize) struct MyStruct { size_t nSize; ... };Buffertstorleken i byte av en parameter
pMav typenMyStruct *anses sedan vara:min(pM->nSize, sizeof(MyStruct))
Exempel
#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
};
Anmärkningar för det här exemplet:
-
_Field_z_motsvarar_Null_terminated_._Field_z_för namnfältet anger att namnfältet är en null-avslutad sträng. -
_Field_range_förbufferSizeanger att värdetbufferSizeför ska vara inom 1 ochMaxBufferSize(båda inkluderande). - Slutresultatet av anteckningarna
_Struct_size_bytes_och_Field_size_är likvärdiga. För strukturer eller klasser som har en liknande layout_Field_size_är det lättare att läsa och underhålla eftersom det har färre referenser och beräkningar än motsvarande_Struct_size_bytes_anteckning._Field_size_kräver inte konvertering till bytestorleken. Om bytestorlek är det enda alternativet kan du till exempel använda ett tomrumspekarfält_Field_size_bytes_. Om både_Struct_size_bytes_och_Field_size_finns kommer båda att vara tillgängliga för verktyg. Det är upp till verktyget vad det ska göra om de två anteckningarna inte överensstämmer.