Delphi保留字和标识符
在Delphi中声明变量使我想到了一个我无法理解的东西。Delphi保留字和标识符
问题是这样的:声明字符串,人们可以观察到string
是一个保留字,同时宣布其他数据类型,比如整数数据类型修饰符是不是保留字,但一个标识符(即Integer
,资本我这样讲)。实际上,Delphi允许你去定义Integer
,你发现它的定义包含在System单元中,但它只是代表性的,因为有一条评论指出一些常量(如True
),标识符(如Integer
),函数和过程直接内置于编译器中。
我无法弄清楚这个选择背后的原因。
有人可以帮忙吗?
string
和Integer
类型之间的区别的一点解释。下面的代码
type
Integer = Char;
var
I: Integer;
begin
I:= 'A';
ShowMessage(I);
end;
是正确的,按预期工作,而下一行
type
string = Integer;
给编译时错误。
据我所知string
是Turbo Pascal时代以来的保留字。所以保持这种方式的原因必须是兼容性的。
Pascal - > Turbo Pascal - > Object Pascal - > Delphi。
检查这些资源。
- The Pascal Programming Language(这表明帕斯卡的原来的保留字,不串)
- Turbo_Pascal Version 6.0 Programmers Guide(这表明该字符串是如何保留字)
起初,我相信,'string'被列为由Borland作为所谓的“结构化”的类型之一,以'array'和'record'一起,因为它有额外的语法元素它(方括号,最大长度说明)。因此它不得不成为一个保留字,用一种特殊的方式进行分析,而不像简单的类型,它们只是标识符,比如'Integer'或'Real'。 – 2012-01-03 15:49:59
@AndriyM它仍然有额外的语法元素 – 2012-01-03 15:50:41
@DavidHeffernan:是的,在“老办法”时,它会自动认为是'ShortString',我知道了。我的观点是,最初它严格地说是一种结构类型。现在它更常用作简单的字符串(指针)类型(语法上),并且由于旧用法的支持,它可能必须保留为保留字。 – 2012-01-03 16:00:35
string
必须保留字,因为它并非专门用于指代System.[Ansi|Unicode]String
类型。如果string
是某些内部编译器类型的简单别名,那么string[20]
将不再起作用。这对于Integer
不是问题,因为Integer
总是意味着“System.Integer
”类型。
Delphi *不区分大小写。 – 2012-01-03 14:29:50
是的,我知道。尽管Delphi不区分大小写,但根据InfixCaps约定,它被认为是一种很好的编程习惯。我也一样, – 2012-01-03 14:33:51
+1,因为这是一个有趣的问题,尽管可能没有“明确的”答案。然而,我个人的猜想是,'string'类型被很多compuler魔法所包围,所以它被提升为'保留字'而不是'Ctrl +可点击的内置类型'... – 2012-01-03 14:44:56