Cast的立即操作数的含义

时间:2018-10-09 07:05:42

标签: c mingw32

我当时在看this帖子。想知道两件事

  1. C99标准说
  

整数常量表达式应具有整数类型

但是不确定长久和长久是否也以相同的方式处理。我尝试使用以下示例,但未收到任何编译器警告或错误。所以我想整数意味着枚举,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);
}
  1. 有人可以在陈述中解释“演员表立即操作数”的含义吗?
  2. “一个整数常量表达式应具有整数类型,并且仅应具有作为整数常量的操作数,...其结果是作为常量的立即数的浮点常量”

(在同一SO帖子中,@ user963241有一个未答复的评论)。

赞赏一个开关案例,以证实使用浮点常量作为强制类型转换的立即操作数。

我使用MinGW 32位编译器。

1 个答案:

答案 0 :(得分:1)

根据C标准草案(N1570)中有关类型的第6.2.5节:

  

有五种标准整数类型,指定为char, short int, int, long int, long long int

其中有signedunsigned个对应对象。

“作为强制类型转换的立即数的浮点常量”的含义意味着强制类型转换的操作数本身是 (不是经过一些算术运算后),是一个浮动常量。

例如:

(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;
}