我有一些 C++ 代码,它打印了一个 size_t
:
size_t a;
printf("%lu", a);
我希望在32位和64位架构上编译此代码时不会收到任何警告。
如果这是C99,我可以使用printf(“%z”,a);
。 但据我了解,在任何标准的C ++语言中都不存在%z
。所以,我必须执行以下操作:
printf("%lu", (unsigned long) a);
这看起来真的很丑陋。
如果语言中没有打印 size_t
的功能,我想知道是否有可能编写 printf 包装器或类似方法,以便在 size_t
上插入适当的转换,从而消除不必要的编译器警告,同时仍然保持良好的警告。
有任何想法吗?
编辑 为了澄清为什么我使用 printf:我正在清理一个相对较大的代码库。它使用 printf 包装器来执行诸如“发出警告、将其记录到文件并可能使用错误退出代码”的操作。我也许能够动手编写一个 cout 包装器来实现同样的功能,但我不想改变程序中的每个 warn() 调用,只是为了消除一些编译器警告。
“%l”
吗?那不是总是正确的大小吗?或者可移植性很重要吗? - Mooing Duckint(a)
。 - Wolf