我有一些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包装器执行“写警告,将其记录到文件中,并可能由于错误而退出代码”之类的操作。我也许能够使用cout包装器来聚集足够的C ++-foo,但是我不想改变程序中的每个warn()调用只是为了摆脱一些编译器警告。
"%l"
吗?那不是总是合适的尺寸吗?还是可移植性重要?