如何在C编译时打印sizeof()的结果?
现在,我正在使用静态断言(基于其他Web资源进行自制)将sizeof()结果与各种常量进行比较。尽管这行得通……但远非优雅或快捷。我还可以创建变量/结构的实例并在映射文件中查找,但是它比直接调用/命令/运算符还不够优雅和快捷。此外,这是一个使用多个交叉编译器的嵌入式项目……因此,将示例程序构建并加载到目标程序,然后读取值比上述任何一种方法都更加麻烦。
在我的情况下(旧版GCC),在打印警告之前#warning sizeof(MyStruct)
实际上并没有解释sizeof()。
最佳答案
当我偶然发现此功能时,我正在四处寻找类似的功能:
Is it possible to print out the size of a C++ class at compile-time?
这给了我这个主意:
char (*__kaboom)[sizeof( YourTypeHere )] = 1;
在VS2015中导致以下警告:
warning C4047: 'initializing': 'DWORD (*)[88]' differs in levels of indirection from 'int'
在这种情况下,88就是您要寻找的尺寸。
super hacky,但能成功。可能要迟几年,但是希望这对某人有用。
我还没有机会尝试使用gcc或clang,但是如果有人在我之前不了解它,我将尝试确认它是否有效。
编辑:开箱即用,适用于clang 3.6
我可以为GCC工作的唯一技巧是滥用
-Wformat
并让宏定义如下函数:void kaboom_print( void )
{
printf( "%d", __kaboom );
}
这会给您一个警告,例如:
...blah blah blah... argument 2 has type 'char (*)[88]'
比最初的建议略粗一些,但是也许知道gcc更好的人可以想到一个更好的滥用警告。
关于c - 如何在C编译时打印sizeof()的结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20979565/