Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Sie können Struktur- und Klassenmember kommentieren, indem Sie Anmerkungen verwenden, die wie Invarianten fungieren– sie werden angenommen, dass sie bei jedem Funktionsaufruf oder Funktionseintrag/-exit wahr sind, der die eingeschlossene Struktur als Parameter oder ergebniswert umfasst.
Struktur- und Klassen-Anmerkungen
_Field_range_(low, high)Das Feld befindet sich im Bereich (einschließlich) von
lowzuhigh. Entspricht dem_Satisfies_(_Curr_ >= low && _Curr_ <= high)Anwenden auf das kommentierte Objekt mithilfe der entsprechenden Vor- oder Nachbereitungsbedingungen._Field_size_(size), ,_Field_size_opt_(size)_Field_size_bytes_(size)_Field_size_bytes_opt_(size)Ein Feld, das eine schreibbare Größe in Elementen (oder Byte) aufweist, wie angegeben.
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)Ein Feld, das eine beschreibbare Größe in Elementen (oder Byte) aufweist, wie angegeben
size, und die Elemente (Bytes), diecountlesbar sind._Field_size_full_(size), ,_Field_size_full_opt_(size)_Field_size_bytes_full_(size)_Field_size_bytes_full_opt_(size)Ein Feld, das sowohl lesbare als auch schreibbare Größe in Elementen (oder Byte) aufweist, wie angegeben
size._Field_z_Ein Feld, das eine null-beendete Zeichenfolge enthält.
_Struct_size_bytes_(size)Gilt für Struktur- oder Klassendeklaration. Gibt an, dass ein gültiges Objekt dieses Typs größer als der deklarierte Typ sein kann, wobei die Anzahl der Byte angegeben wird
size. Zum Beispiel:typedef _Struct_size_bytes_(nSize) struct MyStruct { size_t nSize; ... };Die Puffergröße in Byte eines
pMTypparametersMyStruct *wird dann wie folgt übernommen:min(pM->nSize, sizeof(MyStruct))
Beispiel
#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
};
Hinweise für dieses Beispiel:
-
_Field_z_entspricht_Null_terminated_._Field_z_für das Namensfeld gibt an, dass das Namensfeld eine null-beendete Zeichenfolge ist. -
_Field_range_fürbufferSizegibt an, dass der Wert vonbufferSizezwischen 1 undMaxBufferSizeliegen sollte (beide einschließlich). - Die Endergebnisse der
_Struct_size_bytes_Und_Field_size_Anmerkungen sind gleichwertig. Für Strukturen oder Klassen mit einem ähnlichen Layout ist es einfacher zu_Field_size_lesen und zu verwalten, da sie weniger Verweise und Berechnungen als die entsprechende_Struct_size_bytes_Anmerkung aufweist._Field_size_erfordert keine Konvertierung in die Bytegröße. Wenn die Bytegröße die einzige Option ist, z. B. für ein leeres Zeigerfeld,_Field_size_bytes_kann verwendet werden. Wenn beides_Struct_size_bytes_vorhanden ist_Field_size_, stehen beide Tools zur Verfügung. Es liegt an dem Tool, was zu tun ist, wenn die beiden Anmerkungen nicht einverstanden sind.
Siehe auch
- Verwenden von SAL-Anmerkungen zum Reduzieren von C/C++-Codefehlern
- Einführung in SAL
- Hinzufügen einer Anmerkung zu Funktionsparametern und Rückgabewerten
- Hinzufügen einer Anmerkung zum Funktionsverhalten
- Hinzufügen einer Anmerkung zum Sperrverhalten
- Angeben, wann und wo eine Anmerkung gültig ist
- Systeminterne Funktionen
- Empfohlene Vorgehensweisen und Beispiele