如何阻止编译器采用八进制格式?

时间:2019-03-15 15:55:48

标签: gcc

我有一些自动生成的代码。该代码是针对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];

编译器将看到0809并假定为八进制。但是,对于其他任何数字都没有这样的假设。

是否有前缀表示“不是八进制”? (此外,为什么只使用0809

1 个答案:

答案 0 :(得分:1)

0作为数字中的前导字符是C标准的方式,用于定义紧随其后的是八进制数字。仅0809给出错误的原因是它们不是有效的八进制数。 01-07都是有效的八进制数字,表示您期望的相同的十进制数字1-7。出于同样的原因,十六进制数字0x0-0x9看起来与0-9十进制相同,只要您忽略了0x,它表明后面的十六进制数字即可。

但是,89不是有效的八进制数字,就像A不是有效的十进制数字一样,尽管用十六进制表示也很好,表示十进制10。

您需要删除前导零0才能将它们视为十进制数字,并按预期工作。