0

我是 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,它有一定的长度(2 个字节的数据?),然后有一个局部变量用作标志,这样以后就可以使用全局变量了struct SOMEVAR 可以设置为该值。但是因为有(PARAM),它就像那个特定实例的数组?谢谢。抱歉我的解释不好,但希望您能理解我的要求。

4

2 回答 2

2

只是为了放大@MSB 已经提到的内容:COMMON 块告诉编译器如何在内存中布置变量。几乎没有理由将它们与现代 Fortran 一起使用,即与任何可以处理 Fortran 90 或更高版本的编译器一起使用,并且有充分的理由避免使用它们。

并且添加一件事:在现代 Fortran 中,您可以大致完成 C 结构对用户定义类型所做的事情。检查您的文档中的 TYPE。

于 2010-06-15T06:12:31.230 回答
1

第一个声明将 SOMEVAR 作为两个字节的标量整数。您展示的用法 SOMEVAR 有一个数组——基于它被索引。这可以通过“序列关联”在 Fortran 中完成,但这是不好的做法。在一个文件中,您可以将 SOMEVAR 声明为 INTEGER*2 并将两个字节分配给该标量。在另一个文件中,您可以将其声明为 INTEGER*1 SOMEVAR(2),并保留两个字节,这次是为两个元素组成的数组,每个元素一个字节。在两个文件中使用相同的公共块会导致这两个变量逐字节重叠——序列关联。许多年前,当内存非常小时,程序员这样做是为了减少内存使用,因为他们知道不同的子程序在不同的时间使用变量。今天这样做的原因非常非常有限。大多数人不应该

您还可以使用 EQUIVALENCE 语句设置序列关联。再次,最好避免。TRANSFER 函数取代了人们必须做需要 EQUIVALENCE 语句的“棘手”事情的时代。

于 2010-06-15T00:31:33.717 回答