Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sabit değerler gibi davranan ek açıklamalar kullanarak yapı ve sınıf üyelerine açıklama ekleyebilirsiniz; bunlar, kapsayan yapıyı parametre veya sonuç değeri olarak içeren herhangi bir işlev çağrısında veya işlev girişinde/çıkışında doğru kabul edilir.
Yapı ve Sınıf Ek Açıklamaları
_Field_range_(low, high)
Alan, ile arasında (dahil)
low
high
bulunur._Satisfies_(_Curr_ >= low && _Curr_ <= high)
Uygun ön koşullar veya gönderi koşulları kullanılarak açıklama eklenen nesneye uygulanana eşdeğerdir._Field_size_(size)
,_Field_size_opt_(size)
,_Field_size_bytes_(size)
,_Field_size_bytes_opt_(size)
tarafından
size
belirtilen öğelerde (veya baytlarda) yazılabilir boyuta sahip bir alan._Field_size_part_(size, count)
,_Field_size_part_opt_(size, count)
,_Field_size_bytes_part_(size, count)
,_Field_size_bytes_part_opt_(size, count)
tarafından
size
belirtilen öğelerde (veya baytlarda) yazılabilir boyuta vecount
okunabilir olan bu öğelerin (bayt) değerine sahip bir alan._Field_size_full_(size)
,_Field_size_full_opt_(size)
,_Field_size_bytes_full_(size)
,_Field_size_bytes_full_opt_(size)
tarafından
size
belirtilen öğelerde (veya baytlarda) hem okunabilir hem de yazılabilir boyuta sahip bir alan._Field_z_
Null olarak sonlandırılan dizeye sahip bir alan.
_Struct_size_bytes_(size)
Yapı veya sınıf bildirimi için geçerlidir. Bu türdeki geçerli bir nesnenin, tarafından
size
belirtilen bayt sayısıyla bildirilen türden büyük olabileceğini gösterir. Örneğin:typedef _Struct_size_bytes_(nSize) struct MyStruct { size_t nSize; ... };
Daha sonra türdeki
pM
bir parametreninMyStruct *
bayt cinsinden arabellek boyutu şu şekilde alınır:min(pM->nSize, sizeof(MyStruct))
Örnek
#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
};
Bu örnek için notlar:
-
_Field_z_
eşdeğeri,_Null_terminated_
olur._Field_z_
ad alanı için ad alanının null olarak sonlandırılan bir dize olduğunu belirtir. -
_Field_range_
içinbufferSize
değerininbufferSize
1 veMaxBufferSize
(ikisi de dahil) içinde olması gerektiğini belirtir. - ve
_Struct_size_bytes_
ek açıklamalarının_Field_size_
bitiş sonuçları eşdeğerdir. Benzer bir düzene sahip yapılar veya sınıflar için,_Field_size_
eşdeğer_Struct_size_bytes_
ek açıklamaya göre daha az başvuru ve hesaplamaya sahip olduğundan okuması ve bakımı daha kolaydır._Field_size_
bayt boyutuna dönüştürme gerektirmez. Bayt boyutu tek seçenekse, örneğin geçersiz işaretçi alanı_Field_size_bytes_
için kullanılabilir. Hem hem de_Struct_size_bytes_
_Field_size_
varsa, her ikisi de araçlar tarafından kullanılabilir. İki ek açıklamanın aynı fikirde olmadığı durumda yapılması gerekenler aralığa bağlı.