Directives are words that are sensitive in specific locations within source code. Directives have special meanings in Object Pascal, but, unlike reserved words, appear only in contexts where user-defined identifiers cannot occur. Hence, although it is inadvisable to do so, you can define an identifier that looks exactly like a directive.
Fundamental syntactic elements:
Overview
指示字对源代码中的特殊位置是敏感的。在Object Pascal中,指示字具有特殊意义,但与保留字不同的是,指示字仅出现在用户定义的标识符不能出现的上下文(范围)中。因此,可以定义与指示字正好一样的标识符,尽管这样做是不妥当的(从代码易读的角度来说,容易产生混淆和歧义,尽管编译器能够正确区分)。
编者注
下面的例子说明了指示字与保留字的区别。
TForm1 = class(TForm)
...
procedure ProcMyMsg(var
message: TMessage); message WM_USER + 100;
...
在上面的代码中,出现的两个message具有不同含义。前者作为ProcMyMsg过程的参数,是一个标识符;后者作为指示字,含义是把过程ProcMyMsg作为消息处理程序,与消息WM_USER
+ 100联系在一起。前者可以用任何有效的标识符来替换(这样就不至于产生歧义),而后者则无法用其他标识符或保留字来替换。同样,前者也不能用保留字来替换。下面的写法将不被编译器认可:
procedure ProcMyMsg(var
for: TMessage); message WM_USER + 100;//保留字不能作为标识符
因此,尽可能不要定义与指示字同名的标识符。Object Pascal允许标识符具有任意长度(只要代码编辑器支持;而事实上完全不必定义长达数百个字符的标识符),而且前255个字符有效,相信不至于无法避免与指示字同名。