C 我不知道';i的大小是短整型的,因此我不理解大小如何等于float而不是短整型

C 我不知道';i的大小是短整型的,因此我不理解大小如何等于float而不是短整型,c,C,我不明白为什么大小等于float而不是short int,因为我的大小是short int 这是我的密码: #include <stdio.h> int main() { int x = 1; short int i = 2; float f = 3; if (sizeof((x == 2) ? f : i) == sizeof(float)) printf("float\n"); else if (sizeof((x == 2

我不明白为什么大小等于
float
而不是
short int
,因为我的大小是
short int

这是我的密码:

#include <stdio.h>
int main()
{
    int x = 1;
    short int i = 2;
    float f = 3;
    if (sizeof((x == 2) ? f : i) == sizeof(float))
        printf("float\n");
    else if (sizeof((x == 2) ? f : i) == sizeof(short int))
        printf("short int\n");
}
#包括
int main()
{
int x=1;
短整数i=2;
浮动f=3;
如果(sizeof((x==2)?f:i==sizeof(float))
printf(“float\n”);
else如果(sizeof((x==2)?f:i==sizeof(short int))
printf(“短int\n”);
}

条件表达式的类型始终在编译时定义。 表达式
(x==2)?f:i
属于
float
类型,因为提升了
i


不计算
sizeof
(VLAs除外),因此即使
x==2

三元运算符只有一种类型,也不会对其进行检查。在您的示例中,
short int
被提升为
float
sizeof
不是一个函数,因此它不能计算运行时值,如
x==2
@cleblanc三元运算符在编译时有一个定义的类型
sizeof
不会被计算(除了VLAs)。@Osiris肯定会,这就是它编译的原因,我只是指出它不会做她似乎想要的事情,即计算
x==2