Gcc 如何阻止编译器使用八进制?

Gcc 如何阻止编译器使用八进制?,gcc,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] =

我有一些自动生成的代码。代码是针对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];
pa_结果[06]=pa_正[06]-pa_负[06];
pa_结果[07]=pa_阳性[07]-pa_阴性[07];

pa_结果[08]=pa_阳性[08]-pa_阴性[08]// 零
0
作为数字中的前导字符是C定义后面是八进制数的标准方法。只有
08
09
给出错误的原因是它们不是有效的八进制数
01
-
07
都是有效的八进制数,表示与预期相同的十进制数1-7。这与十六进制数
0x0
-
0x9
看起来与0-9十进制数相同,只要忽略表示后面是十六进制数的
0x

但是,
8
9
不是有效的八进制数字,正如
a
不是有效的十进制数字一样,即使在十六进制中,它是非常好的,表示十进制10


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

考虑到在数字中假定八进制前缀为0是标准行为,我无法想象编译器会将其更改为不符合要求的内容。话虽如此,我希望编译器至少对这一个发出警告。@E_net4它只对其中两个发出警告。我今天才注意到,因为我从0-7个条目变成了0-16个条目。gcc在
08
之前不会发出警告。所以,我想我将只注入一个空格,而不是0。我在生成它的代码中使用了%02i。