OpenVMS初始化记录类型

时间:2014-04-08 10:31:10

标签: initialization fortran fortran77 openvms

我有一些我想要改进的遗留代码......我喜欢采用的一种方法是使用结构来组织数据而不是等价操作....不寒而栗。这是在OpenVMS Fortran 6.4上我理解为Fortran77加上一些东西(可能是错的)。

我想像这样初始化一个记录变量:

structure /my_data/
  integer*2   var1
  integer*2   var2
  character*5 NameTag
end structure

record /my_data/ OrganizedData

data OrganizedData /1, 2, 'Fred '/

我知道数据语句是错误的,编译器告诉我。检查帮助文件,似乎DATA不支持此版本中的记录变量。谁能确认一下?除了直接分配之外,是否有任何建议来初始化这样的东西?

3 个答案:

答案 0 :(得分:0)

我这里只有Oracle(Sun)手册,而不是OpenVMS,但它实现了相同的VAX扩展(完全不标准!)。这里没有描述的结构构造函数,可以用于在单个表达式中创建结构的值。

它还说:

  

COMMON语句中不允许记录字段。

     

DATA,EQUIVALENCE或NAMELIST语句中不允许记录和记录字段。

     

SAVE语句中不允许记录字段。

如果您可以使用接受Fortran 90的编译器,则可以使用

type my_data
  integer*2   var1
  integer*2   var2
  character*5 NameTag
end type

type(my_data) :: OrganizedData

OrganizedData  = my_data(1, 2, 'Fred')

(我在那里留下了非标准*符号。)

答案 1 :(得分:0)

这是你在DEC Fortran中的表现方式:

structure /my_data/
  integer*2   var1 /1/
  integer*2   var2 /2/
  character*5 NameTag /'Fred'/
end structure

record /my_data/ OrganizedData

end

请注意,初始化是在类型上 - 这将为该类型的所有变量提供相同的初始值。

答案 2 :(得分:0)

对于那个版本的DEC FORTRAN,如果你想为每个实例提供不同的值,我认为你需要在运行时初始化记录字段。

 OrganizedData.var1 = 1 ! etc.

有一些技巧,比如使用COMMON并制作一个MACRO汇编程序PSECT,可以在编译时初始化值,但我猜这不是你想要的。 (如果你是,请告诉我。)

另外,我忘了它是否为6.4,但是接收一个有静态初始化的传递参数会导致编译器错误或警告。