매크로 정 의 를 이용 하여 컴 파일 단계 에서 구조 체 크기 를 검사 하 는 방법
2726 단어 구조 체
=====================================================
typedef struct
{
char a[100];
} T_XXX;
typedef struct
{
char a[99];
} T_QQQ;
/* */
#define SIZE_OF_TYPE_EQUAL_TO(type, size) \
static inline char size_of_##type##_equal_to_##size() \
{ \
char __dummy1[sizeof(type) - size]; \
char __dummy2[size - sizeof(type)]; \
return __dummy1[-1] + __dummy2[-1]; \
}
/* */
#define SIZE_OF_TYPE_UNEQUAL_TO(type, size) \
static inline char size_of_##type##_unequal_to_##size() \
{ \
char __dummy1[0==(10/(sizeof(type)-size))]; \
return __dummy1[-1]; \
}
/* */
#define SIZE_OF_TYPE_NOT_LARGER_THAN(type, size) \
static inline char size_of_##type##_not_larger_than_##size() \
{ \
char __dummy1[size - sizeof(type)]; \
return __dummy1[-1]; \
}
/* */
#define SIZE_OF_TYPE_NOT_SMALLER_THAN(type, size) \
static inline char size_of_##type##_not_smaller_than_##size() \
{ \
char __dummy1[sizeof(type) - size]; \
return __dummy1[-1]; \
}
/* */
#define SIZE_OF_TYPE_SMALLER_THAN(type, size) \
SIZE_OF_TYPE_NOT_LARGER_THAN(type, size) \
SIZE_OF_TYPE_UNEQUAL_TO(type, size)
/* */
#define SIZE_OF_TYPE_LARGER_THAN(type, size) \
SIZE_OF_TYPE_NOT_SMALLER_THAN(type, size) \
SIZE_OF_TYPE_UNEQUAL_TO(type, size)
/* 2 */
#define SIZE_OF_TYPE_SMALLER_THAN2(type, size) \
static inline char size_of_##type##_smaller_than2_##size() \
{ \
char __dummy1[size - sizeof(type) - 1]; \
return __dummy1[-1]; \
}
/* 2 */
#define SIZE_OF_TYPE_LARGER_THAN2(type, size) \
static inline char size_of_##type##_larger_than2_##size() \
{ \
char __dummy1[sizeof(type) - size - 1]; \
return __dummy1[-1]; \
}
/* */
#define SIZE_OF_TYPE_IS_MULTIPLE_OF(type, size) \
static inline char size_of_##type##_is_multiple_of_##size() \
{ \
char __dummy1[0 - (sizeof(type) % size)]; \
return __dummy1[-1]; \
}
/***
, , , 。
, 。
, , :-)
***/
SIZE_OF_TYPE_EQUAL_TO(T_XXX, 100)
SIZE_OF_TYPE_UNEQUAL_TO(T_XXX, 99)
SIZE_OF_TYPE_NOT_LARGER_THAN(T_XXX, 100)
SIZE_OF_TYPE_NOT_SMALLER_THAN(T_QQQ, 98)
SIZE_OF_TYPE_LARGER_THAN(T_QQQ, 96)
SIZE_OF_TYPE_SMALLER_THAN(T_QQQ, 200)
SIZE_OF_TYPE_LARGER_THAN2(T_QQQ, 96)
SIZE_OF_TYPE_SMALLER_THAN2(T_QQQ, 200)
SIZE_OF_TYPE_IS_MULTIPLE_OF(T_QQQ, 9)
int main()
{
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어의 구조 체 배열C 언어의 구조 체 배열 1. 구조 체 배열 개념 2. 구조 체 배열 의 정의 와 초기 화 3. 구조 체 배열 의 인용 구조 체 배열 의 개념 요 소 는 구조 체 유형의 배열 을 구조 체 배열 이 라 고 부 르 는데...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.