我有一些 C++ 代码打印size_t
:
size_t a;
printf("%lu", a);
我希望在 32 位和 64 位架构上编译时不会出现警告。
如果这是 C99,我可以使用printf("%z", a);
. 但是 AFAICT%z
不存在于任何标准的 C++ 方言中。所以相反,我必须做
printf("%lu", (unsigned long) a);
这真的很难看。
如果语言中没有size_t
内置打印 s 的工具,我想知道是否可以编写一个 printf 包装器或类似的东西,size_t
以便在 s 上插入适当的强制转换,以消除虚假的编译器警告,同时仍然保持良好的警告。
有任何想法吗?
编辑澄清我为什么使用 printf:我有一个相对较大的代码库,我正在清理。它使用 printf 包装器来执行诸如“写入警告,将其记录到文件,并可能以错误退出代码”之类的操作。我可能能够收集足够的 C++-foo 来使用 cout 包装器来执行此操作,但我不想更改程序中的每个 warn() 调用只是为了摆脱一些编译器警告。