c语言 - 在不执行程序的情况下计算任意类型的大小



给定 C 程序中的任何类型,我想知道它的大小,例如执行以下行时的大小,

printf("%dn",sizeof(myType));

无需实际执行程序。该解决方案必须使用可在编译时确定其大小的任意类型,例如用户定义的结构。

其基本原理是,如果可以在编译时知道它,那么应该有一种方法可以提取该信息而无需运行程序。可能比必须解析生成的汇编程序源代码或二进制文件以查找文字常量更优雅一些,但如果这是唯一的方法,我会采取我能得到的。

这个问题对我来说不太有用,因为 OP 的解决方案依赖于执行代码,而投票最多的答案依赖于预处理器 info 指令实际扩展宏(我的工具链显然不是)。

作为背景,我正在为PIC18 MCU开发并使用XC8编译器。

最终想要的是验证我定义的某些结构是否占用了内存中的预期大小。

这是静态断言的经典用例。如果您的编译器支持 _Static_assert ,您可以编写

_Static_assert(sizeof(mystruct) == expected_size, "Invalid struct size.");

演示 1

如果使用尚不支持 C-1x 的旧编译器,请使用依赖于声明负大小数组类型的常见解决方法:

#define CHECK_SIZE(x,e) if(sizeof(char[2*(sizeof(x)==e)-1])==1);

演示 2

最新更新