구조체 및 클래스에 주석 지정

고정처럼 작동하는 주석을 사용하여 구조체 및 클래스 멤버에 주석을 추가할 수 있습니다. 이 주석은 바깥쪽 구조체를 매개 변수 또는 결과 값으로 포함하는 함수 호출 또는 함수 진입/종료 시 true로 간주됩니다.

구조체 및 클래스 주석

  • _Field_range_(low, high)

    필드가 범위(포함)에서 lowhigh. _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 이 1 MaxBufferSize 및(둘 다 포함) 내에 있어야 했음을 지정합니다.
  • 주석과 _Field_size_ 주석의 _Struct_size_bytes_ 최종 결과는 동일합니다. 레이아웃 _Field_size_ 이 비슷한 구조체 또는 클래스의 경우 해당 _Struct_size_bytes_ 주석보다 참조 및 계산이 적기 때문에 읽기 및 기본 쉽게 확인할 수 있습니다. _Field_size_ 에서는 바이트 크기로 변환할 필요가 없습니다. 바이트 크기가 유일한 옵션인 경우(예: void 포인터 필드에 _Field_size_bytes_ 대해) 사용할 수 있습니다. 둘 다 _Struct_size_bytes_ 존재하는 _Field_size_ 경우 둘 다 도구에서 사용할 수 있습니다. 두 주석이 동의하지 않는 경우 어떻게 해야 하는지 도구에 달려 있습니다.

참고 항목