2017-01-14 3 views
-3

컴파일 타임에 struct 요소의 크기를 어떻게 알 수 있습니까? 컴파일 타임에 struct 요소의 크기를 확인 하시겠습니까?

내가 시도 :

#define XSTR(x) STR(x) 
#define STR(x) #x 
#pragma message "Size of struct: " XSTR(sizeof(my_struct.element)) 

그러나 그것은 단지 보여줍니다

note: #pragma message: Size of struct: sizeof(my_struct.element) 

나는 그것이 적당한 크기의 주장 싶지 않아요. 크기가 무엇인지 알고 싶습니다.

편집 : "어떻게 sizeof를 사용합니까?"라는 질문을하지 않았습니다. (그것은 다른 포스트가 물었던 것이다). 그래서 나는 그것을 복제본으로 보지 않는다. 어떻게 다른 질문 컴파일시 구조체 요소?의 크기를 볼 수있다 "물었다.

내가 컴파일러가 16 비트 구조체에 32 비트를 할당하는 이유를 해결하기 위해 노력하고 있습니다.

+3

... 너무 많은 downvote가 있기 때문에 질문을 재현하십시오. 네가 원하는 것은 불가능하고 감각이 없다. – Stargateur

+1

전 처리기가'sizeof'와 같은 키워드에 대해 알지 못하기 때문에 그렇게 할 수 없습니다. 구조체의 크기가 훨씬 작습니다. –

+0

나쁜 질문을 다시 게시해도 더 이상 도움이되지 않습니다. 질문 금지를하는 것은 좋은 방법입니다. 원본에 좋은 추천을했는데 다시 게시하지 않습니다. – Olaf

답변

0

내가 후회 다음 추한, 무차별 대입 방법은 내가 가지고 올 수있는 모든 것입니다. 그러나이 일을 말합니다.

방법 1

컴파일이 크기에 해당하는 행에 실패합니다. 어떤 라인을 확인하여 실패, 구조체 요소의 크기를 알고있다

#define STATIC_ASSERT_SIZE(an_item, a_siz) do { enum { dummy_var = 1/((an_item == a_siz)? 0 : 1)}; } while (0) 

STATIC_ASSERT_SIZE(sizeof(my_struct.element), 0); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 1); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 2); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 3); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 4); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 5); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 6); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 7); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 8); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 9); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 10); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 11); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 12); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 13); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 14); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 15); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 16); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 17); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 18); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 19); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 20); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 21); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 22); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 23); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 24); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 25); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 26); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 27); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 28); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 29); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 31); 
STATIC_ASSERT_SIZE(sizeof(my_struct.element), 32); 

방법 2

가 컴파일 가정이 사용하는 얼마나 많은 바이트를 알려줍니다 컴파일러에 의해 생성 된 MAP 파일의 변수 봐.