Yapıları ve Sınıfları Yorumlama
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. Örnek:typedef _Struct_size_bytes_(nSize) struct MyStruct { size_t nSize; ... };
Daha sonra türdeki
MyStruct *
bir parametreninpM
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
_Field_size_
ek açıklamalarının_Struct_size_bytes_
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ı.
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin