有什么方法可以为 fortran 模块中的变量编写 EQUIVALENCE 吗?
Is there any way to write EQUIVALENCE for a variable in a fortran Module?
嗯,我在 Fortran 中遇到了一个问题,我需要对一个已经在其他人编写的模块中声明的变量使用等价(现在可能已经死了,否则我会联系 him/her).
模块中的变量为REAL类型。我想在其中存储一个 INTEGER 值。
如果我直接这样做,错误的数据将以 REAL 类型存储。
我曾尝试在模块中使用等价性,但没有成功。
有帮助吗?
嗯,EQUIVALENCE
是一个旧关键字,在现代 Fortran 中应该避免使用它,因为它会使代码产生误导,但它还没有从 Fortran 标准中删除,AFAIK。
但是,如果您只需要将整数的逐位表示形式存储在实变量中,我宁愿建议使用内部函数 TRANSFER
来逐字传递二进制将一个变量的内容转换为另一种类型的变量,无需任何转换,也不会引发错误。所以,假设你真正的模块变量是 x
而你的整数值是 i
你可以简单地做:
x = TRANSFER(i,x)
第二个参数可以是任何实数变量,不一定是 x
本身,它只是给编译器提示结果是实数类型,将它赋值给实变量。
嗯,我在 Fortran 中遇到了一个问题,我需要对一个已经在其他人编写的模块中声明的变量使用等价(现在可能已经死了,否则我会联系 him/her).
模块中的变量为REAL类型。我想在其中存储一个 INTEGER 值。 如果我直接这样做,错误的数据将以 REAL 类型存储。 我曾尝试在模块中使用等价性,但没有成功。 有帮助吗?
嗯,EQUIVALENCE
是一个旧关键字,在现代 Fortran 中应该避免使用它,因为它会使代码产生误导,但它还没有从 Fortran 标准中删除,AFAIK。
但是,如果您只需要将整数的逐位表示形式存储在实变量中,我宁愿建议使用内部函数 TRANSFER
来逐字传递二进制将一个变量的内容转换为另一种类型的变量,无需任何转换,也不会引发错误。所以,假设你真正的模块变量是 x
而你的整数值是 i
你可以简单地做:
x = TRANSFER(i,x)
第二个参数可以是任何实数变量,不一定是 x
本身,它只是给编译器提示结果是实数类型,将它赋值给实变量。