Почему анализатор C не допускает пробелов между цифрами целочисленного литерала?
Я ожидаю, что это нарушит другой синтаксический анализ, но это не сразу приходит в голову...
например. Если я скажу это:
#include <stdio.h>
int main()
{
int i = 10 000;
printf("%d\n", i);
return 0;
}
Мой компилятор говорит следующее:
ctest.c:5: error: expected ‘,’ or ‘;’ before numeric constant
Я думаю, что это будет особенность, т.е. легче "синтаксический анализ" больших целых чисел с разделителями тысяч.
Я использую недавний GCC и предполагаю, что это касается других компиляторов/парсеров/лексеров; в зависимости от того, что это объекты.
Ответы
Ответ 1
Язык не позволяет этого (целочисленный литерал - это один токен, промежуточный пробел разбивает его на два токена), но, как правило, почти ничего не происходит, если выразить инициализатор как выражение, которое является вычислением литералов:
int i = 10 * 1000; /* ten thousand */
Ответ 2
Ну, это противоречило бы способности перегрузить оператор пространства, который предлагается для С++.
(Да, я знаю, что это не серьезное предложение).
EDIT: Это была просто глупая вещь выше, мой настоящий комментарий - это часть ниже
Для меня способность помещать пробелы в числах повысит и уменьшит читаемость. Если вам нужно прочитать номера, это, вероятно, облегчит это. Но я думаю, что это также сделает код более медленным для чтения, потому что вам придется мысленно сделать один дополнительный шаг, анализируя код в голове, а не просто глядя на конец токена. Предполагая, что вас не интересует фактическое значение числа при чтении.
Я не верю, что есть какая-то техническая причина, из-за которой это невозможно сделать, тем более, что люди видят номер как единый неделимый токен, поэтому он должен быть написан так. Я должен сказать, что я точно не знаю, почему, но это раздражало бы меня, чтобы числа, разбитые так, как в коде. Я не могу сказать, что для этого есть веская причина, но она по-прежнему верна:) Возможно, это то, к чему я привык.