在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
空格(#32)和控制符(#0 到#31,其中#13 叫回车符或行的结束符)被称为空白符(blank)。
特殊符号是非文字和数字字符,或这类字符的组合,它们有固定的意义。 ‘[’相当于‘(.’,‘]’相当于‘.)’;‘(*’和‘*)’分别相当于‘{’和‘}’(表示注释)。 ,!(惊叹号)、 ”(双引号)、 %(百分号)、 ?(问号)、 \(反斜杠)、 _(下划线)、 |(通道)和 ~(破折 号)不是特殊符号 $前缀表示一个16 进制数字,比如$8F 标签是一个不超过4 位的阿拉伯数字序列,也就是从0 到9999,打头的0 没有意义 。若单引号中没有内容(’’),它被称为空串(null string)。在一个引用串中,两个连续的单引号(’’)表示一个字 符,也就是单引号本身(’)控制串由一个或多个控制字符(控制符)所组成,每个控制符包含一个#,后跟一个无符号整数(10 进制或16 进制),整数的范围从0 到255,表示相应的ASCII 字符。下面的控制串 #89#111#117 就相当于引用串 ’You’ 运算符包括:@ not ^ * / div mod and shl shr as + - or xor = > < <> <= >= in 和 is。 一些运算符的行为因为传给它们的数据类型不同而不同。比如,not 运算符用于整数时,是对它的 位进行求反运算,而对布尔类型进行逻辑非运算。 除了 ^ ,is 和 in,其它运算可应用在Variant 类型上。 • 不管x 和y 的类型是什么,x/y 的结果总是扩展类型(extended);对其它运算符,只要有一个 运算数是实数类型,它的结果就是扩展类型;另外,只要有一个运算数是Int64 类型,它的结果就是Int64 类型;否则 ,结果就是整数类型。如果一个运算数是整数的子界类型,它就像整数类型一样被对待。 • x div y 的值取整数,也就是取得x/y 的值,然后以0 的方向取得最近的整数。 • mod 运算返回对运算数进行整数除后得到的余数。换句话说,就是x mod y = x - (x div y)*y。 布尔运算符not、and、or 和xor 作用于任何布尔类型的运算数,并返回一个布尔类型的值。 使用 $B 编译器指示字控制计算方式,默认状态是 {$B-},它采用部分计算。要在局部进行完全计 算,在代码中使用 {$B+} 指示字。你也可以在Compiler Options 对话框中选择Complete Boolean Evaluation 选项,此时在整个项目范围使用完全计算。 <Leo>///部分计算 equals 短路计算 in C++/C# 若任何一个运算数是variant 类型,编译器总是进行完全计算(即使在 {$B-} 状态下) Logical (bitwise) operators(位逻辑运算符):not and or xor shl shr • 位反(not)运算的返回类型和运算数相同; • 若and、or 或xor 的运算数都是整数类型,则它的返回类型是包含运算数所有可能的值、且范围最小的预定义(内置)整数类型;• 运算 x shl y 和 x shr y 把 x 的值向左或向右移 y 个位,也就等同于 x 乘或除以 2^y(2的 y 次方),返回类型 和 x 相同。比如,若 N 存储的是01101(10 进制的13),那么 N shl 1 返11010(10 进制26)。注意,y 的值被解释为对 x 所属类型大小(位数)进行模运算,比如,若 x 是一个integer,x shl 40 被解释为 x shl 8,因为integer的大小是32 位(4字节),40 mod 32 等于8。 关系运算符 =、<>、<、>、<= 和 >= 都能对字符串进行操作 + 运算符连接两个字符串 • + 运算符的运算数可以是字符串、packed string(packed arrays of type Char)或字符。但是,若其中一个运算数 是宽字符(WideChar)类型,其它运算数必须是长字符串。 • + 运算符的返回结果和任何字符串类型是兼容的。但是,若运算数都是短字符串或字符,并且它们的组合长度大于255 ,则返回结果取前面的255 个字符。 关系运算符 <、>、<= 和 >= 能对PChar 类型进行操作。其它的指运算符:+- 指针加减 ^ 取得指针所指的内容 = <> 等于 不等于 对于Pointer 类型,在dereference 之前必须进行类型转换。 • 若I 是一个整数,P 是一个字符指针,那么P + I 是把P 的地址加上I,也就是一个指向P 后面 第I 个字符处的指针(表达式I + P 等同于P + I);P ? I 是把P 的地址减去I,也就是一个指向P 前面第I 个字符处的指针。 • 若P 和Q 都是字符指针,那么P ? Q 计算P 的地址(高地址)和Q 地址(低地址)之差,也就 是返回一个表示P 和Q 之间字符数目的整数。P + Q 没有意义。 Set operators(集合运算符): +并集 - 差集 * 交集 <= 小于等于(子集)>= 大于等于(超集) =等于 <>不等于 in 成员关系 以下规则适用于 +、? 和 * 运算符: • 当且仅当序数(集合基础类型中的一个值)O 属于集合X 或集合Y(或同时属于X 和Y)时, O 属于X + Y;当且仅当O 属于X 但不属于Y 时,O 属于X ? Y;当且仅当O 同时属于X 和Y 时,O 属于X * Y。 • +、? 和 * 的运算结果属于集合类型set of A..B,这里A 是结果中的最小序数,B 是结果中的 最大序数。 以下规则适用于 <=、>=、=、<> 和 in 运算符: • 只有当X(集合)中的每个成员也是Y(集合)中的成员时,X <= Y 才为真;Z >= W 等同于 W <= Z;只有当U(集合)和V(集合)正好拥有相同的成员时,U = V 才为真,否则U <> V 为真; • 对于序数O 和集合S,只有当O 是S 的一个成员时,O in S 才为真。 • 除了实数和整数能一起比较外,两个运算数必须是兼容的类型; • 对字符串进行比较,是依据它的每个字符在扩展ASCII 字符集中的顺序,字符类型被当作长度 为1 的字符串; • 两个packed string 要进行比较,它们必须具有相同数目的元素;一个具有n 个元素的packed string 与一个字符串比较时,它被看作长度为n 的字符串; • 只有当两个PChar 指针都指向同一个字符数组的范围内时,<、>、<= 和 >= 运算符才能作用 于它们; • 运算符 = 和 <> 能以类或类引用类型作为运算数。当用于类类型时,= 和 <> 的计算规则与 指针一样,只有当C 和D 指向同一个实例对象时,C = D 为真,否则C <> D 为真;当用于类 引用时,只有当C 和D 表示同一个类时,C = D 为真,否则C <> D 为真。 as 和 is 运算符使用类和对象(实例)作为运算数,as 也用于接口类型。 @ 运算符返回一个变量、函数、过程或方法的地址,也就是说,@ 运算符构建一个指向运算数的 指针。 • 若X 是一个变量,@X 返回X 的地址(当X 是一个过程类型的变量时有特殊的规则,请参考语 句和表达式中的过程类型)。若默认的编译器指示字 {$T?} 在起作用,则@X 的类型是 Pointer(通用指针);在 {$T+} 状态下时,@X 的类型是 ^T,这里T 是X 的类型; • 若F 是一个例程(一个函数或过程),@F 返回F 的入口点,@F 的类型总是Pointer; • 当 @ 作用于类的方法时,必须使用类名来限定方法名。比如 @TMyClass.DoSomething 它指向TMyClass 的DoSomething 方法。 Set constructors(集合构造器) [5, 6, 7, 8] [ 5..8 ] [red, green, MyColor] [1, 5, 10..K mod 12, 23] [’A’..’Z’, ’a’..’z’, Chr(Digit + 48)] 集合构造器[]表示空集 字符串、数组、数组属性以及指向字符串或数组的指针能被索引。比如:FileName[21] 强制类型转换的语法是 typeIdentifier(expression) 若表达式是一个变量,结果被称为variable typecast(变量转换);否则,结果是一个value typecast(值转换)。虽 然它们的语法相同,但它们有不同的转换规则。 在值转换中,类型标志符和转换的表达式必须都是有序类型或指针类型。值转换的例子包括 Integer(’A’) Char(48) Boolean(0) Color(2) Longint(@Buffer) 声明的语法以及声明的位置取决于要定义的标志符的种类。通常,声明只能出现在块(block)的开始处, 以及单元的接口或实现部分的开始处(在uses 子句之后)。 Hint 指示字platform、deprecated 和library 能附加在任何声明之后。在声明过程或函数的情况下,应 使用分号把hint 指示字和声明的其它部分分开。比如: procedure SomeOldRoutine; stdcall; deprecated; var VersionNumber: Real library; type AppError = class(Exception) ... end platform; 当源代码在{$HINTS ON} {$WARNINGS ON}状态下编译时,对使用上述指示字声明的标志符的每个引 用都将产生一个适当的提示或警告。使用platform 标记一个条目和特定的操作系统(比如Windows 和 Linux)相关;使用deprecated 表示条目已经废弃或支持它仅为了向后兼容性;使用library 表示依赖于 特定的库或组件框架(比如VCL 或CLX)。 赋值语句的格式如下 variable := expression 这里,variable 是任何变量引用,包括变量、变量类型转换、解除引用的指针,或者一个结构变量的组 成部分;expression 是任何一个赋值兼容的表达式。(在函数块中,variable 能被函数名取代,参考Procedures and functions。 当启用扩展语法时({$X+}),调用函数也可以像调用过程那样 当这样调用函数时,它的返回值被忽略。 goto label label: statement label label; label label1, ..., labeln; • 复合语句或with 语句只是简单地执行一系列语句; • 条件语句,也就是if 或case 语句,根据指定的标准,最多执行一个分支; • 循环语句,包括repeat、while 和for 循环,重复执行一系列语句; • 一组特殊的语句,包括raise、try...except 和try...finally 结构,用来创建和处理异常。 with 语句的语法是 with obj do statement 或 with obj1, ..., objn do statement if 语句有两种形式:if...then 和if...then...else 比如, if J = 0 then Exit else Result := I/J; if J <> 0 then begin Result := I/J; Count := Count + 1; end else if Count = Last then Done := True else Exit; Case Statements(Case 语句): case selectorExpression of caseList1: statement1; ... caseListn: statementn; else statements; end case I of 1..5: Caption := ’Low’; 6..9: Caption := ’High’; 0, 10..99: Caption := ’Out of range’; else Caption := ’’; end; selectorExpression 是任何一个有序类型的表达式(字符串无效),和C++一样的。 。Object Pascal 有三种循环:repeat 语句、while 语句和for 语句。 使用Break 和Continue 过程来控制repeat、while 或for 语句的流程。 repeat 语句的语法是 repeat statement1; ...; statementn; until expression 比如: repeat Write(’Enter a value (0..9): ’); Readln(I); until (I >= 0) and (I <= 9); while 语句的语法是 while expression do statement 比如: while I > 0 do begin if Odd(I) then Z := Z * X; I := I div 2; X := Sqr(X); end; for 语句的语法是 for counter := initialvalue to finalvalue do statement 或 for counter := initialvalue downto finalvalue do statement 比如:for C := Red to Blue do Check(C); 一个块包含一系列的声明,后面跟一个符合语句。所有的声明必须一起出现在块的开始处,所以,块的 形式是 declarations; begin statements; end; 比如: function UpperCase(const S: string): string; var Ch: Char; L: Integer; Source, Dest: PChar; begin ... end; |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论