0

GCCコンパイラでpacked属性なしで定義および宣言された構造体のパックサイズを見つける方法はありますか?

例:

struct Name
{
   int a;
   char ch;
}

関数またはマクロのようなものget_packed_size(Name)は 5 を返す必要があります

4

2 に答える 2

2

必要な情報を提供するマクロを使用して構造体を定義します。例 (他にも可能な実装があります):

#define DEFINE_STRUCT_WITH_KNOWN_PACKED_SIZE(StructName, StructBody)\
struct StructName StructBody\
struct __attribute__ ((__packed__)) StructName##_packed StructBody

#define GET_PACKED_SIZE(StructName) sizeof (struct StructName##_packed)

DEFINE_STRUCT_WITH_KNOWN_PACKED_SIZE(Name, {
   int a;
   char ch;
};)

#include <stdio.h>

int main() {
    printf("%lu", GET_PACKED_SIZE(Name));
}
于 2014-05-07T07:52:24.643 に答える
0

いいえ、方法はありません... しかありません。sizeof()パディングを処理する必要があります...

于 2014-05-07T07:31:30.613 に答える