这是给软件考古学家的!
在您问我为什么还要设法使它起作用时,原因仅仅是因为我可以-我认为这是一个很好的借口!
我发现该过程的以下代码使用VAX PASCAL进行编译(并按预期运行)。
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
我尝试使用VARYING和ARRAY类型而不是STRING,但是它们也不起作用。不幸的是,我找不到在SYS $ EXAMPLES或我发现的bitavers手册中返回STRING的函数的示例。
希望有人比我有更好的记忆。
谢谢
这提示String(16)
函数中的返回值对于编译器来说太模糊了。
通过声明适合编译器的字符串类型来解决此问题:
type
String16 = packed array[1..16] of char;
然后,您可以在函数中使用该不同类型:
FUNCTION format(number : INTEGER) : String16;
VAR
result : String16;
BEGIN
:
:
format := result;
END.
这是很多在pascal语言(和Turbo Pascal)的早期实现中使用的,并且仍然有效。像Delphi和FreePascal这样的现代编译器已经为字符串实现了专门的动态数组,该数组涵盖了更方便的字符串类型处理,而不必依赖声明严格的大小。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句