Почему имена переменных не могут начинаться с цифр? - PullRequest
124 голосов
/ 05 декабря 2008

Я работал с новым разработчиком C ++ некоторое время назад, когда он задал вопрос: «Почему имена переменных не могут начинаться с цифр?»

Я не мог придумать ответ, за исключением того, что некоторые числа могут содержать текст (123456L, 123456U), и это было бы невозможно, если бы компиляторы думали, что все с некоторым количеством буквенных символов является именем переменной.

Это был правильный ответ? Есть еще причины?

string 2BeOrNot2Be = "that is the question"; // Why won't this compile?

Ответы [ 24 ]

0 голосов
/ 23 апреля 2018

В процессе лексического анализа во время компиляции фрагмента кода избегается обратное отслеживание . Переменная как Apple; компилятор узнает его идентификатор сразу же, когда он встретит букву «А» на этапе лексического анализа. Однако такая переменная, как 123apple; компилятор не сможет решить, является ли его число или идентификатор, пока он не достигнет «а», и ему нужно вернуться назад, чтобы перейти на фазу лексического анализа, чтобы определить, что это переменная. Но это не поддерживается в компиляторе.

Ссылка

0 голосов
/ 08 апреля 2015

Переменная может рассматриваться как значение также во время компиляции поэтому значение может вызывать значение снова и снова рекурсивно

0 голосов
/ 05 декабря 2008

Я думаю, что простой ответ заключается в том, что это возможно, ограничение основано на языке. В C ++ и многих других это невозможно, потому что язык не поддерживает это. Это не встроено в правила, чтобы позволить это.

Вопрос похож на вопрос: почему король не может перемещать четыре шахматных поля за раз в шахматах? Потому что в шахматах это незаконный ход. Может это в другой игре точно. Это зависит только от правил, по которым играют.

0 голосов
/ 23 февраля 2012

Первоначально это было просто потому, что легче запомнить (можно придать ему большее значение) имена переменных в виде строк, а не чисел, хотя числа могут быть включены в строку, чтобы усилить смысл строки или разрешить использование того же самого имя переменной, но обозначенное как отдельное, но близкое значение или контекст. Например, loop1, loop2 и т. Д. Всегда сообщали бы, что вы были в цикле, и / или цикл 2 был циклом внутри loop1. Что бы вы предпочли (имеет большее значение) в качестве переменной: адрес или 1121298? Что легче запомнить? Однако, если язык использует что-то для обозначения того, что это не просто текст или числа (такие как адрес $ in $), это на самом деле не должно иметь значения, так как это скажет компилятору, что последующее следует рассматривать как переменную в этом случае). В любом случае все сводится к тому, что разработчики языка хотят использовать в качестве правил для своего языка.

...