【发布时间】:2016-11-25 05:54:15
【问题描述】:
在下面的代码中:
#include<stdio.h>
int main(void)
{
printf("%d",sizeof(int));
return 0;
}
在 gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 编译器上编译时会发出警告:
格式“%d”需要“int”类型的参数,但参数 2 具有类型 ‘long unsigned int’ [-Wformat=] printf("%d",sizeof(int));
为什么我会收到此警告? sizeof 的返回类型是 'long unsigned int' 吗?
当我将 '%d' 替换为 '%ld' 时,警告消失了。
【问题讨论】:
-
sizeof是运算符,而不是函数。 -
这个问题在这里得到解答:stackoverflow.com/questions/24797843/…
-
为避免警告,您必须将值转换为 int。就像当你定义自己的 sizeof() 运算符时,你需要这样的转换,#define my-sizeof(type)(int*)(&type+1)-(int*)(&type)
-
@lazyborg:您的宏不适用于
my_sizeof(int)和my_sizeof(v)(带有一些int v;变量)和my_sizeof(2);换句话说,sizeof运算符是真正需要的。