2017-01-14 41 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) 

私はそれが正しいサイズだと主張する必要はありません。私はサイズが何であるか知りたい。

EDIT:「どのようにsizeofを使用しますか?」という質問はしませんでした。 (これは他の投稿が尋ねたものです)、私はそれを重複として見ません。私は別の質問である?コンパイル時に構造体要素の大きさを見ることができる方法」を尋ねた。

私は、コンパイラが16ビット構造体に32ビットを割り当てている理由をトラブルシュートしようとしています。

+3

...あなたはあまりにも多くのdownvoteを持っているので、あなたはちょうど質問を再作成しますか?あなたが望むものは不可能であり、意味がありません。 – Stargateur

+1

プリプロセッサーが 'sizeof'のようなキーワードについて知りません。構造体のサイズがずっと小さくなります。 –

+0

悪い質問を再投稿してもそれ以上のことはありません。質問禁止を得るのは単なる良い方法です。私はオリジナルで良い推薦をしましたが、私は再び投稿しません。 – Olaf

答えて

0

私は後悔します以下の醜い、ブルートフォース方法は、私が思い付くことができるすべてである。しかし、彼らが働くと言うこと。

方法1

コンパイルはサイズに対応する行に失敗した。これはラインチェックすることにより私はstruct要素のサイズを知っています

#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ファイル内の変数を見てください。

関連する問題