这是给软件考古学家的!
在你问我为什么要努力让它发挥作用之前,原因很简单--我认为这是一个很好的借口!
我发现下面的过程代码使用VAX编译(并按预期运行)。
PROCEDURE format(number : INTEGER);
VAR
result : STRING(16);
BEGIN
:
:
writeln(result);
END.但是,如果将其转换为函数并尝试以字符串的形式返回结果,它将不会编译。
FUNCTION format(number : INTEGER) : STRING(16);
VAR
result : STRING(16);
BEGIN
:
:
format := result;
END.此错误表明错误位于函数的类型定义。
FUNCTION format(number : INTEGER) : STRING(16);
1
PASCAL-E-TYPCNTDISCR, Type can not be discriminated in this context我尝试使用可变和数组类型而不是字符串,但它们也不起作用。不幸的是,我找不到一个函数的示例,该函数在SYS$示例或我找到的比特保护程序手册中返回字符串。
希望有人比我有更好的记忆力。
谢谢
发布于 2020-02-19 19:22:56
Pascal的类型系统被描述为“太强”,因为数组或字符串的大小是其类型的一部分,.“强、弱分型
这表明函数返回值中的String(16)对于编译器来说太模糊了。
通过声明适合编译器的字符串类型来修正这个问题:
type
String16 = packed array[1..16] of char;然后,您可以在函数中使用这种不同的类型:
FUNCTION format(number : INTEGER) : String16;
VAR
result : String16;
BEGIN
:
:
format := result;
END.这是pascal语言(和Turbo )的许多早期实现中所使用的,并且仍然有效。像Delphi和FreePascal这样的现代编译器已经为字符串实现了一个专门的动态数组,它涵盖了字符串类型的更方便的处理,而不依赖于声明一个严格的大小。
https://stackoverflow.com/questions/60296600
复制相似问题