我当时在看this帖子。想知道两件事
整数常量表达式应具有整数类型
但是不确定长久和长久是否也以相同的方式处理。我尝试使用以下示例,但未收到任何编译器警告或错误。所以我想整数意味着枚举,char,int,long和long long。
int main(void)
{
unsigned long long a=4294967296LL; // no need of LL
switch (a)
{
case 4294967296:
printf("Hello");
break;
}
return(0);
}
(在同一SO帖子中,@ user963241有一个未答复的评论)。
赞赏一个开关案例,以证实使用浮点常量作为强制类型转换的立即操作数。
我使用MinGW 32位编译器。
答案 0 :(得分:1)
根据C标准草案(N1570)中有关类型的第6.2.5节:
有五种标准整数类型,指定为
char, short int, int, long int, long long int
。
其中有signed
和unsigned
个对应对象。
“作为强制类型转换的立即数的浮点常量”的含义意味着强制类型转换的操作数本身是 (不是经过一些算术运算后),是一个浮动常量。
例如:
(int)(3.14f) //1. Here the operand is an floating constant that is an immediate operand
(int)(22.0/7.0f) //2. Here the operand is NOT an floating constant that is an immediate operand.
您可以在switch case语句中使用1,如下所示:
switch(op) {
case (int)(3.14f):
break;
}