在下面的代码中:
#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'吗?
当我用'%ld'替换'%d'时,警告就开始了。
答案 0 :(得分:14)
在编译时处理sizeof
operator(并且可以应用于两种类型和表达式)。它给出了size_t
类型的一些常量 * 。在您的系统上(以及我的Debian / Linux / x86-64)sizeof(int)
是(size_t)4
。那个size_t
type通常是typedef
- 在unsigned long
之类的某种类型中(但实际上它的整体类型取决于实现)。你可以编码
printf("%d", (int)sizeof(int));
或(因为printf了解%zd
的{{1}}或%zu
控制格式字符串
size_t
为了获得最大的便携性,请使用printf("%zu", sizeof(int));
(而不是%zu
)进行打印%ld
(因为您可能会找到size_t
为size_t
等的系统或配置...)。
注意*:除VLA
外,unsigned int
始终保持不变