#define my_sizeof_one(type) (char *)(&type+1)-(char*)(&type)
int main(void)
{
int answer;
short x = 1;
long y = 2;
float u = 3.0;
double v = 4.4;
long double w = 5.54;
char c = 'p';
uint32_t e = 653;
uint16_t f = 44;
uint64_t g = 2323232;
typedef enum
{
kCountInvalid,
kCountOne,
kCountTwo,
kCountThree,
kCountFour,
}k_count_t;
/* __DATE__, __TIME__, __FILE__, __LINE__ are predefined symbols */
#if 1
printf("Date : %s\n", __DATE__);
printf("Time : %s\n", __TIME__);
printf("File : %s\n", __FILE__);
printf("Line : %d\n", __LINE__);
#endif
/* The size of various types */
printf("The size of int %zu\n", my_sizeof_one(answer));
printf("The size of short %zu\n", my_sizeof_one(x));
printf("The size of long %zu\n", my_sizeof_one(y));
printf("The size of float %zu\n", my_sizeof_one(u));
printf("The size of double %zu\n", my_sizeof_one(v));
printf("The size of long double %zu\n", my_sizeof_one(w));
printf("The size of char %zu\n", my_sizeof_one(c));
printf("The size of enum %zu\n", my_sizeof_one(k_count_t));
printf("The size of uint16_t %zu\n", my_sizeof_one(f));
printf("The size of uint32_t %zu\n", my_sizeof_one(e));
printf("The size of uint64_t %zu\n", my_sizeof_one(g));
return 0;
}
나는 다음과 같은 오류 얻을 : my_sizeof는 설명 C.Can 누군가에 열거 된 데이터 유형에 대한 작동하지 않는 몇 가지 이유를 들어my_sizeof 매크로 열거 데이터 형식 작동하지 않습니다
error: expected expression before 'k_count_t'
error: expected expression before 'k_count_t'
을 이유가 뭐야?
k_count_t에 매크로 및 하위 문구를 입력하십시오. 답변이 명확 해집니다. 유형의 주소를 사용할 수 없습니다. 다른 모든 사용법은 변수를 전달하는 것처럼 보입니다. –
하지만 정상적인 sizeof() 빌드 C에서 매크로가 열거 형 데이터 형식에 대해 작동합니까 – liv2hak
'normal sizeof()'는 매크로가 아니며 컴파일러가 이해할 수있는 연산자입니다 –