Joe*_*ate 2 pascal freepascal turbo-pascal
我试图理解fpc -Mtp -vw在 Linux 下以 Turbo 模式(特别是)编译的 Free Pascal 中看到的某种神奇的行为。代码来自 Jack Crenshaw 的“让我们构建编译器”,第四部分,特别是带有Input和Output程序的最后一个版本,可在http://www.pp4s.co.uk/main/tu-trans-comp-jc-04找到html的。我发现“神奇”的是程序中的Read(Table[GetName]);那一行Input。根据 FP 文档,“Read从文件 F 中读取一个或多个值,并将结果存储在 V1、V2 等中;如果未指定文件 F,则读取标准输入。” 在Read是在GetChar过程中,它似乎行为很像C'S getchar(),即检索标准输入缓冲区中的下一个字符。在里面Input调用它似乎表现得像一个复杂的scanf()自动跳过空格并将多位数字转换为整数,并消除对GetNum函数的需要,如果你使用,它不会被调用,例如?i 345,但会被调用如果你尝试i=345,如果你=在解析错误的结果两边留一个空格。是否有其他一些文件证实了 Free、Turbo 甚至通用 Pascal 的明显多功能性Read?
Pascal 读、写例程很神奇。IOW 它不是某个库中存在的真正函数,而是编译器生成一系列对运行时的调用。该系列由 read、readln、write 和 writeln 以及扩展的 Pascal readstr和writestr 组成,它们是“从字符串”版本的读写。
调用取决于参数的类型,以及它们是否有额外的参数(例如 write 采用 :x 整数格式值和 :x:y 实数格式值):
writeln(x:10:5);
Run Code Online (Sandbox Code Playgroud)
在 Free Pascal 中,与 Turbo Pascal 和 Delphi 不同,还公开了一些类似 RTTI 的功能,例如 writeln() 一个 enum 类型的变量,将把 enum 的值打印为标识符(字符串)。
错误处理和格式设置有一定的限制,所以它们的用法会随着问题的复杂程度而变化
至于您的观察,您的 getchar 之类的调用可能读取了一个 char 类型的变量,而另一个函数的类型不同。
| 归档时间: |
|
| 查看次数: |
300 次 |
| 最近记录: |