我是Fortran的新手,只是做一些简单的工作。作为一个新的程序员,一般不确定这是如何工作的,所以请原谅我,如果我的解释或符号不是最好的。在.F文件的顶部有常见的声明。向我解释的人说,把它想象成C中的结构,并且它们是全局的。同样在同一.F文件中,它们以什么类型声明它。所以它就像:
COMMON SOMEVAR
INTEGER*2 SOMEVAR
然后当我实际看到它在其他文件中使用时,它们声明了局部变量(例如SOMEVAR_LOCAL),并且根据条件,它们设置SOMEVAR_LOCAL = 1或0.
然后还有另一个有条件的条件,就像
那样IF (SOMEVAR_LOCAL. eq. 1)
SOMEVAR(PARAM) = 1;
(我再次道歉,如果这不是合适的Fortran,但我现在无法访问代码)。所以在我看来,像一个名为SOMEVAR的变量的“struct”有一定长度(2个字节的数据?),然后有一个局部变量用作一个标志,以便稍后在线,全局struct SOMEVAR可以设置为该值。但是因为有(PARAM),它就像是一个特定实例的数组?谢谢。对不起我的错误解释,但希望你能理解我的要求。
答案 0 :(得分:2)
只是为了放大@MSB已经提到过的东西:COMMON块告诉编译器如何在内存中放置变量。几乎没有理由将它们与现代Fortran一起使用,即任何能够应对Fortran 90或更高版本的编译器,并且有充分的理由可以避免它们。
并添加一件事:在现代Fortran中,您可以大致了解C结构对用户定义类型的作用。检查文档中的TYPE。
答案 1 :(得分:1)
第一个声明将SOMEVAR作为两个字节的标量整数。您显示的用法有SOMEVAR有一个数组 - 基于它被索引。这可以通过“序列关联”在Fortran中完成,但这是不好的做法。在一个文件中,您可以将SOMEVAR声明为INTEGER * 2,并将两个字节分配给此标量。在另一个文件中,您可以将其声明为INTEGER * 1 SOMEVAR(2),并保留两个字节,这次是两个元素的数组,每个元素一个字节。在两个文件中使用相同的公共块可能导致这两个变量重叠,逐字节 - 序列关联。许多年前,当内存非常小时,程序员这样做是为了减少内存使用,知道不同的子程序在不同的时间使用变量。今天这样做的原因非常非常有限。大多数人不应该因为它容易混淆。
您还可以使用EQUIVALENCE语句设置序列关联。再次,最好避免。对于必须执行需要EQUIVALENCE语句的“棘手”事物的时代的现代替代是TRANSFER功能。