如何在 C 语言编译时打印 sizeof() 的结果?
现在我使用静态断言(基于其他网络资源自制)将 sizeof() 结果与各种常量进行比较。虽然这有效……但它远非优雅或快速。我还可以创建变量/结构的实例并查看映射文件,但这也比直接调用/命令/运算符不太优雅和快速。此外,这是一个使用多个交叉编译器的嵌入式项目......因此构建示例程序并将其加载到目标,然后读出一个值比上述任何一个都更麻烦。
就我而言(旧海湾合作委员会),#warning sizeof(MyStruct)
在打印警告之前实际上并不解释 sizeof() 。
当我偶然发现这个时,我正在四处寻找类似的功能:
是否可以在编译时打印出 C++ 类的大小?
这给了我这个想法:
char (*__kaboom)[sizeof( YourTypeHere )] = 1;
这会导致 VS2015 中出现以下警告:
warning C4047: 'initializing': 'DWORD (*)[88]' differs in levels of indirection from 'int'
在本例中,88 就是您要寻找的尺寸。
超级hacky,但它确实有效。可能已经晚了几年,但希望这对某人有用。
我还没有机会尝试使用 gcc 或 clang,但如果有人没有在我之前使用它,我会尝试确认它是否有效。
编辑:clang 3.6 开箱即用
我能在 GCC 工作的唯一技巧就是滥用-Wformat
并让宏定义如下函数:
void kaboom_print( void )
{
printf( "%d", __kaboom );
}
这会给你一个警告,例如:
...blah blah blah... argument 2 has type 'char (*)[88]'
比原来的建议稍微粗暴一些,但也许对海湾合作委员会有更多了解的人可以想出更好的滥用警告。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)