我有一些我想要改进的遗留代码......我喜欢采用的一种方法是使用结构来组织数据而不是等价操作....不寒而栗。这是在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不支持此版本中的记录变量。谁能确认一下?除了直接分配之外,是否有任何建议来初始化这样的东西?
答案 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,但是接收一个有静态初始化的传递参数会导致编译器错误或警告。