C编程类型铸造和sizeof()

C编程类型铸造和sizeof(),c,gcc-warning,C,Gcc Warning,当我输入cast并将一个双精度数据类型转换为int型数据类型,然后我尝试打印大小,它会显示int型大小,但在编译时它会给我警告(gcc)。我想知道为什么它会给我警告,以及如何消除此警告 我也尝试过使用structs,但编译时仍会显示警告。 cast.c:12:11:警告:格式“%d”要求参数类型为“int”,但参数2的类型为“long unsigned int”[-Wformat=] printf(“%d\n”,sizeof(cast)); ~^ %ld #include <stdio.h

当我输入cast并将一个双精度数据类型转换为int型数据类型,然后我尝试打印大小,它会显示int型大小,但在编译时它会给我警告(gcc)。我想知道为什么它会给我警告,以及如何消除此警告

我也尝试过使用structs,但编译时仍会显示警告。 cast.c:12:11:警告:格式“%d”要求参数类型为“int”,但参数2的类型为“long unsigned int”[-Wformat=] printf(“%d\n”,sizeof(cast)); ~^ %ld

#include <stdio.h>

int main(void){
    double n=0;
    //  int x=0;
    int cast;
    cast = (int) n;
    printf("%d\n",sizeof(cast));
    return 0;
}
#包括
内部主(空){
双n=0;
//int x=0;
int-cast;
cast=(int)n;
printf(“%d\n”,sizeof(cast));
返回0;
}

我希望找出它显示警告的原因。

sizeof
生成类型为
size\t
的值。打印它的正确方法是使用以下格式
%zu

printf("%zu\n", sizeof cast));

z
size\u t
类型的修饰符,
u
是无符号的,因为
size\u t
是无符号的。(
%d
表示有符号的
int

sizeof
生成类型为
size\t
的值。打印它的正确方法是使用以下格式
%zu

printf("%zu\n", sizeof cast));

z
size\u t
类型的修饰符,
u
是无符号的,因为
size\u t
是无符号的。(
%d
表示有符号的
int

请用标准英语书写。警告非常清楚,
sizeof
返回一个
size\u t
,它在您的系统上定义为
长无符号int
%d
表示(有符号的)
int
,但类型转换也与此完全无关,
sizeof
总是返回一个
size\u t
,无论您在其中传递什么,格式说明符应该是
%zu
。请用标准英语书写。警告非常清楚,
sizeof
返回一个
size\u t
,在您的系统中定义为
长无符号int
%d
表示(有符号)
int
仅此类型转换也与此完全无关,
sizeof
始终返回一个
size\u t
,无论您在其中传递什么,格式说明符应为
%zu
。谢谢!现在我明白了,以前我混淆了数据类型和格式说明符。谢谢!现在我明白了,以前我混淆了数据类型和格式说明符。