Как остановить компилятор от принятия восьмеричного? - PullRequest
0 голосов
/ 15 марта 2019

У меня есть автоматически сгенерированный код. Код предназначен для 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)

1 Ответ

1 голос
/ 15 марта 2019

Ноль 0 в качестве начального символа числа является стандартным способом C, чтобы определить, что ниже следует восьмеричное число. Причина, по которой только 08 и 09 дают ошибку, состоит в том, что это недопустимые восьмеричные числа. 01 - 07 - все действительные восьмеричные числа, которые представляют те же десятичные числа 1 - 7, которые вы ожидаете. Это по той же причине, по которой шестнадцатеричные числа 0x0 - 0x9 выглядят так же, как десятичные дроби 0 - 9, при условии, что вы игнорируете 0x, который указывает на последующие шестнадцатеричные цифры.

Однако 8 и 9 не являются действительными восьмеричными цифрами, точно так же, как A не является действительной десятичной цифрой, хотя в шестнадцатеричном формате это совершенно нормально, представляя десятичное число 10.

Вам нужно будет удалить начальный ноль 0, чтобы они считались десятичными числами и работали, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...