我有一些代码可以打印程序使用的内存量。该行与此类似:
printf("The about of RAM used is %u", anIntVariable*sizeof(double) );
其中 anIntVariable 是双精度数组元素数量的 int 变量。无论如何,在 32 位系统上我从来没有遇到过任何问题,但在 64 位系统上,我收到一个编译器警告,提示我将“%u”用于无符号长整数。使用“%lu”作为格式代码修复了 64 位上的问题,但会导致编译器在 32 位上报错,因为类型恢复为 unsigned int。我发现,确实,sizeof(double) 在 32 位和 64 位系统上返回不同的值。我找到了一些网页指南,可以将代码从 32 位转换为 64 位,但我更希望代码可以同时在两者上运行,而不仅仅是来回转换。
如何以独立于平台的方式编写此行?我知道很多方法可以使用预处理器指令来做到这一点,但这似乎是一种 hack。当然,我没有意识到一种优雅的方式。