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