Delphi зарезервированные слова и идентификаторы - PullRequest
13 голосов
/ 03 января 2012

Объявление переменных в Delphi заставило меня задуматься над тем, чего я не могу понять.

Вопрос заключается в следующем: при объявлении строк можно заметить, что string является зарезервированным словом, а при объявлении других типов данных, скажем, целых, спецификатор типа данных является не зарезервированным словом, а идентификатором (т.е. Integer, заглавная буква, которую я так говорю).

Фактически, Delphi позволяет перейти к определению Integer, которое, как вы обнаруживаете, содержится в системном блоке, но оно является только репрезентативным, посколькукомментарий, в котором говорится, что некоторые константы (например, True), идентификаторы (например, Integer), функции и процедуры встроены непосредственно в компилятор.

Я не могу выяснить причины этого выбора.

Может ли кто-нибудь помочь?


Небольшое объяснение различия между типами string и Integer.Следующий код

type
  Integer = Char;

var
  I: Integer;

begin
  I:= 'A';
  ShowMessage(I);
end;

правильный и работает как положено, а следующая строка

type
  string = Integer;

выдает ошибку времени компиляции.

Ответы [ 2 ]

7 голосов
/ 03 января 2012

Насколько я знаю, string - зарезервированное слово со времен Турбо Паскаля.Таким образом, причина, чтобы сохранить это таким образом, должна быть для совместимости.

Pascal -> Turbo Pascal -> Object Pascal -> Delphi.

Проверить эти ресурсы.

4 голосов
/ 03 января 2012

string должно быть зарезервированным словом, поскольку оно не используется исключительно для обозначения типа System.[Ansi|Unicode]String. Если бы string был простым псевдонимом для некоторого внутреннего типа компилятора, string[20] больше не работал бы. Это не проблема для Integer, потому что Integer всегда означает не что иное, как «тип System.Integer».

...