#pragma pack(show) with GCC

#pragma pack(show) with GCC

本文关键字:with GCC show pack #pragma      更新时间:2023-10-16

有没有办法用GCC显示内存"包"大小?

在Microsoft Visual C++中,我使用的是:

 #pragma pack(show) 

其在警告消息中显示该值;请参阅Microsoft文档。

GCC的等价物是什么?

由于我在相关文档中看不到这样的功能,我将得出结论,GCC无法做到这一点。

每当我打包一个结构并想查看其大小时,我都会使用静态断言。

/*
   The static_assert macro will generate an error at compile-time, if the predicate is false
   but will only work for predicates that are resolvable at compile-time!
   E.g.: to assert the size of a data structure, static_assert(sizeof(struct_t) == 10)
*/
#define STATIC_ASSERT(COND,MSG)      typedef char static_assertion_##MSG[(!!(COND))*2-1]
/* token pasting madness: */
#define COMPILE_TIME_ASSERT3(X,L)     STATIC_ASSERT(X,at_line_##L)             /* add line-number to error message for better warnings, especially GCC will tell the name of the variable as well */
#define COMPILE_TIME_ASSERT2(X,L)     COMPILE_TIME_ASSERT3(X, L)               /* expand line-number */
#define static_assert(X)              COMPILE_TIME_ASSERT2(X, __LINE__)        /* call with line-number macro */
#define PACKED  __attribute__ ((gcc_struct, __packed__))
typedef struct {
  uint8_t bytes[3];
  uint32_t looong;
} PACKED struct_t;
static_assert(sizeof(struct_t) == 7);

每当静态断言失败时,这将向您发出编译时警告。