구조체 및 클래스에 주석 지정
고정처럼 작동하는 주석을 사용하여 구조체 및 클래스 멤버에 주석을 추가할 수 있습니다. 이 주석은 바깥쪽 구조체를 매개 변수 또는 결과 값으로 포함하는 함수 호출 또는 함수 진입/종료 시 true로 간주됩니다.
구조체 및 클래스 주석
_Field_range_(low, high)
필드가 범위(포함)에서
low
high
._Satisfies_(_Curr_ >= low && _Curr_ <= high)
적절한 사전 또는 사후 조건을 사용하여 주석이 추가된 개체에 적용되는 것과 같습니다._Field_size_(size)
,_Field_size_opt_(size)
,_Field_size_bytes_(size)
_Field_size_bytes_opt_(size)
에 지정된 대로 요소(또는 바이트)의 쓰기 가능한 크기가 있는
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)
지정한 대로 요소(또는 바이트)
size
의 쓰기 가능한 크기가 있는 필드와count
읽을 수 있는 해당 요소(바이트)의 필드입니다._Field_size_full_(size)
,_Field_size_full_opt_(size)
,_Field_size_bytes_full_(size)
_Field_size_bytes_full_opt_(size)
에 지정된
size
대로 요소(또는 바이트)에서 읽을 수 있는 크기와 쓰기 가능한 크기가 모두 있는 필드입니다._Field_z_
null로 끝나는 문자열이 있는 필드입니다.
_Struct_size_bytes_(size)
구조체 또는 클래스 선언에 적용됩니다. 해당 형식의 유효한 개체가 선언된 형식보다 클 수 있으며 바이트 수가 지정
size
됨을 나타냅니다. 예시:typedef _Struct_size_bytes_(nSize) struct MyStruct { size_t nSize; ... };
그런 다음 형식 매개 변수
pM
의 버퍼 크기(바이트)MyStruct *
를 다음과 같이 만듭니다.min(pM->nSize, sizeof(MyStruct))
예시
#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
};
이 예제에 대한 참고 사항:
_Field_z_
는_Null_terminated_
와 같습니다._Field_z_
이름 필드의 경우 이름 필드가 null로 끝나는 문자열임을 지정합니다._Field_range_
bufferSize
은 값bufferSize
이 1MaxBufferSize
및(둘 다 포함) 내에 있어야 했음을 지정합니다.- 주석과
_Field_size_
주석의_Struct_size_bytes_
최종 결과는 동일합니다. 레이아웃_Field_size_
이 비슷한 구조체 또는 클래스의 경우 해당_Struct_size_bytes_
주석보다 참조 및 계산이 적기 때문에 읽기 및 유지 관리가 더 쉽습니다._Field_size_
에서는 바이트 크기로 변환할 필요가 없습니다. 바이트 크기가 유일한 옵션인 경우(예: void 포인터 필드에_Field_size_bytes_
대해) 사용할 수 있습니다. 둘 다_Struct_size_bytes_
존재하는_Field_size_
경우 둘 다 도구에서 사용할 수 있습니다. 두 주석이 동의하지 않는 경우 어떻게 해야 하는지 도구에 달려 있습니다.