首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从函数(VAX )返回字符串

从函数(VAX )返回字符串
EN

Stack Overflow用户
提问于 2020-02-19 09:11:01
回答 1查看 713关注 0票数 1

这是给软件考古学家的!

在你问我为什么要努力让它发挥作用之前,原因很简单--我认为这是一个很好的借口!

我发现下面的过程代码使用VAX编译(并按预期运行)。

代码语言:javascript
复制
PROCEDURE format(number : INTEGER);
   VAR
      result : STRING(16);
   BEGIN
     :
     :
      writeln(result);
   END.

但是,如果将其转换为函数并尝试以字符串的形式返回结果,它将不会编译。

代码语言:javascript
复制
FUNCTION format(number : INTEGER) : STRING(16);
   VAR
      result : STRING(16);
   BEGIN
     :
     :
      format := result;
   END.

此错误表明错误位于函数的类型定义。

代码语言:javascript
复制
FUNCTION format(number : INTEGER) : STRING(16);
                                    1
PASCAL-E-TYPCNTDISCR, Type can not be discriminated in this context

我尝试使用可变和数组类型而不是字符串,但它们也不起作用。不幸的是,我找不到一个函数的示例,该函数在SYS$示例或我找到的比特保护程序手册中返回字符串。

希望有人比我有更好的记忆力。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-19 19:22:56

Pascal的类型系统被描述为“太强”,因为数组或字符串的大小是其类型的一部分,.“强、弱分型

这表明函数返回值中的String(16)对于编译器来说太模糊了。

通过声明适合编译器的字符串类型来修正这个问题:

代码语言:javascript
复制
type 
  String16 = packed array[1..16] of char;

然后,您可以在函数中使用这种不同的类型:

代码语言:javascript
复制
FUNCTION format(number : INTEGER) : String16;
VAR
  result : String16;
BEGIN
  :
  :
  format := result;
END.

这是pascal语言(和Turbo )的许多早期实现中所使用的,并且仍然有效。像Delphi和FreePascal这样的现代编译器已经为字符串实现了一个专门的动态数组,它涵盖了字符串类型的更方便的处理,而不依赖于声明一个严格的大小。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60296600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档