在 C 中,如果我想要一个浮点文字 x 为十六进制形式并具有指数值,它将表示为:
float x = 0X2aE+10;
其中0x用于表示它是十六进制的,2a用于表示十六进制字符,E+10用于表示十的10次方的数字。
然而,编译器是否知道它不是 2aE 代表十六进制数字(因为十六进制使用 a 到 e 表示 10-15),而 +10 只是在数字上加 10?如果没有,解决办法是什么?
0X2aE+10
是一个有效的预处理器标记,它不会转换为有效的 C 标记,因此会出现编译错误。 C99 十六进制浮点数使用P
or p
作为指数标记,如:
float x = 0X2aP+10;
哪个有价值0x2a * 1024
-> 43008
.
对于那些不了解预处理数字的人:
6.4.8 预处理数字
Syntax
pp-number:
digit
. digit
pp-number digit
pp-number identifier-nondigit
pp-number e sign
pp-number E sign
pp-number p sign
pp-number P sign
pp-number .
描述
预处理编号以数字开头(可选地前面带有句点 (.)),后面可以是有效标识符字符和字符序列e+
, e-
, E+
, E-
, p+
, p-
, P+
, or P-
.
预处理数字标记在词法上包括所有浮点和整数常量标记。
语义学
预处理数字没有类型或值;它在成功转换(作为转换阶段 7 的一部分)到浮点常量标记或整数常量标记后获取两者。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)