【发布时间】:2016-10-10 14:34:27
【问题描述】:
给定 C 程序中的任何类型,我想知道它的大小,例如在执行以下行时,
printf("%d\n",sizeof(myType));
没有实际执行程序。该解决方案必须适用于大小可以在编译时确定的任意类型,例如用户定义的结构。
基本原理是,如果可以在编译时知道它,那么应该有一种方法可以提取该信息而无需运行程序。可能比解析生成的汇编源代码或二进制文件以获得文字常量更优雅一些,但如果这是唯一的方法,我会尽我所能。
This question 不太适合我,因为 OP 的解决方案依赖于执行代码,而投票最多的答案依赖于实际扩展宏的预处理器信息指令(我的工具链显然没有)。
作为背景,我正在为 PIC18 MCU 开发并使用 XC8 编译器。
【问题讨论】:
-
看看生成的汇编代码?否则,只需阅读 ABI 并自己收集信息。听起来像一个XY问题。你真正想要达到什么目的?你为什么要这样做? 什么你想要这个?
-
您可以为此使用Compile Time Assertion。非常方便。
-
正确的方法是静态断言。或者只是不依赖于此,而是编写正确的代码,其余的留给编译器。
-
@EugeneSh.:如果有标准版本,请不要直接指向非标准拼凑。见
_Static_assert。 -
@Olaf 并非每个编译器都遵循最新标准,而且您知道...
标签: c types compilation sizeof