sizeof运算符在C中的工作原理?

时间:2016-11-25 05:54:15

标签: c sizeof

在下面的代码中:

#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'时,警告就开始了。

1 个答案:

答案 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_tsize_t等的系统或配置...)。

注意*:除VLA

外,unsigned int始终保持不变