我有一些自动生成的代码。该代码是针对MCU的,因此它具有一些不允许循环的时序约束,这意味着我生成了如下代码:
pa_result[06] = pa_positive[06] - pa_negative[06];
pa_result[07] = pa_positive[07] - pa_negative[07];
pa_result[08] = pa_positive[08] - pa_negative[08]; //<--terrible things
pa_result[09] = pa_positive[09] - pa_negative[09]; //<--terrible things
pa_result[10] = pa_positive[10] - pa_negative[10];
pa_result[11] = pa_positive[11] - pa_negative[11];
编译器将看到08
和09
并假定为八进制。但是,对于其他任何数字都没有这样的假设。
是否有前缀表示“不是八进制”? (此外,为什么只使用08
和09
)
答案 0 :(得分:1)
零0
作为数字中的前导字符是C标准的方式,用于定义紧随其后的是八进制数字。仅08
和09
给出错误的原因是它们不是有效的八进制数。 01
-07
都是有效的八进制数字,表示您期望的相同的十进制数字1-7。出于同样的原因,十六进制数字0x0
-0x9
看起来与0-9十进制相同,只要您忽略了0x
,它表明后面的十六进制数字即可。
但是,8
和9
不是有效的八进制数字,就像A
不是有效的十进制数字一样,尽管用十六进制表示也很好,表示十进制10。
您需要删除前导零0
才能将它们视为十进制数字,并按预期工作。