Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis 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