print size_t:format'%lu'期望类型' long unsigned int'

时间:2013-06-16 11:17:00

标签: c gcc printf

我尝试通过强制转换为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”,但这个问题让我感到困扰。

1 个答案:

答案 0 :(得分:2)

假设周围没有丑陋的#define

printf("size:%lu, bsize:%lu", (unsigned long)size, (unsigned long)bsize);

printf("size:%lu, bsize:%lu", ((unsigned long)size), ((unsigned long)bsize));

是等价的。

因此它们将导致相同的代码/警告/错误。

如果他们不这样做,那就会有一些损失。