将时间常量编译为浮点数

emb*_*ert 1 c floating-point compile-time-constant

在将具有双精度的文件转换为浮点数后,编译器(MSCV2005)会警告代码常量中的转换doublefloatfor

...
float r;

r = (q1 + q2) * 0.5;
...
Run Code Online (Sandbox Code Playgroud)

即使q1, q2两个花车0.5似乎都被视为double.

如何调整这种行为,以便所有代码内常量都被视为floats?

Dav*_*nan 9

使用f后缀表示常量具有类型float:

float q1 = ...;
float q2 = ...;
float r = (q1 + q2) * 0.5f;
Run Code Online (Sandbox Code Playgroud)

标准(§6.4.4.2浮动常量)说:

未填充的浮点常量具有类型double.如果用字母后缀f或者F,它已经输入float.如果用字母后缀l或者L,它已经输入long double.

你问题中的常量没有后缀,因此有类型double.


rem*_*s4e 5

只需f在常量后添加:

float f = 0.5f;
Run Code Online (Sandbox Code Playgroud)