澄清整数常量表达式

use*_*241 3 c c99

在某处我读过整数常量表达式包含整数常量,例如:

(5 + 5) //integer constant expression
Run Code Online (Sandbox Code Playgroud)

这是我见过的唯一例子.

现在,从标准说:

(C99 6.6/6)整数常量表达式应具有整数类型,并且只能具有整数常量的操作数,枚举常量,字符常量,结果为整数常量的sizeof表达式,以及作为强制转换的直接操作数的浮点常量.整数常量表达式中的转换运算符只能将算术类型转换为整数类型,除非作为sizeof运算符的操作数的一部分.

那么,如果我是对的,下面是所有这些整数表达式吗?

int i; float f = 3.14f;

i = 42;
i = f;
i = (int)(5/3.14f);
Run Code Online (Sandbox Code Playgroud)

oua*_*uah 5

(int)(5/3.14f) 不是整数常量表达式.

您正在使用浮动常量,该常量不是转换的立即操作数.

当然,i = f;对象f不是整数常量表达式.