跳转到内容

Futurebasic/语言/参考/begin union

来自维基教科书,自由的教科书

Begin Union

[编辑 | 编辑源代码]

✔ 外观 ✔ 标准 ✔ 控制台

begin record recordName
  dim statements...
  begin union
    dim statements
  end union
end record

联合用于在记录中分配空间,该空间可能包含一个以上大小的变量。以下示例在记录中为不同大小的变量分配两个相等的偏移量

begin record RecordWithUnion
  dim beforeUnion
  begin union
    dim inUnion1`
    dim inUnion2$
  end union
end record
dim myTest as RecordWithUnion
myTest.inUnion2$ = "COW"
print myTest.inUnion1

变量 myTest.inUnion1 是一个单字节,它占据与字符串 myTest.inUnion2$ 中的第一个字节相同的空间。在这种情况下,myTest.inUnion1 恰好是字符串的长度字节,而 print 语句将输出“3”。这种重叠不是必需的,这两个值之间可能没有任何关系,除了它们在内存中的相同位置开始。

当 FB 遇到 begin union 语句时,它会检查所有直到 end union 语句的所有 dim,并且联合中最大的项决定了编译器分配的空间量。在上面的示例中,联合将占用 256 个字节,因为联合中最大的元素是一个 256 字节的 Pascal 字符串。

无特别说明。

dim record...dim end record; dim; begin record

语言参考

华夏公益教科书