如何在 C 语言编译时打印 sizeof() 的结果?

2023-12-07

如何在 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(使用前将#替换为@)

如何在 C 语言编译时打印 sizeof() 的结果? 的相关文章

随机推荐