【发布时间】:2013-06-16 11:17:00
【问题描述】:
我尝试通过强制转换为 unsigned long 来打印 size_t(如“C 编程现代方法”一书中所建议的那样),如下所示:
printf("size:%lu, bsize:%lu", (unsigned long)size, (unsigned long)bsize);
printf("size:%lu, bsize:%lu", ((unsigned long)size), ((unsigned long)bsize));
第一行会给我警告(gcc):
warning: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t' [-Wformat]
第一行和第二行有什么区别?我所做的只是添加额外的括号,这到底是做什么的?
我知道我可以使用“%z”,但这个问题困扰着我。
【问题讨论】:
-
您的错误信息与您的示例无关,请检查您的示例程序。
-
你为什么不把它投到
int呢?或者您可以使用%zu格式。应尽可能避免强制转换。 -
在 32 位操作系统上,
size_t很可能是unsigned int。 -
工作正常:ideone.com/JBszdh
-
好吧,也许我确实有一些宏搞砸了,让我检查一下。