Fortran中常见的块使用

我是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),它就像一个特定实例的数组?谢谢。对不起我的错误解释,但希望你能理解我的要求。     
已邀请:
第一个声明将SOMEVAR作为两个字节的标量整数。您显示的用法有SOMEVAR有一个数组 - 基于它被索引。这可以通过“序列关联”在Fortran中完成,但这是不好的做法。在一个文件中,您可以将SOMEVAR声明为INTEGER * 2,并将两个字节分配给此标量。在另一个文件中,您可以将其声明为INTEGER * 1 SOMEVAR(2),并保留两个字节,这次是两个元素的数组,每个元素一个字节。在两个文件中使用相同的公共块可能导致这两个变量重叠,逐字节 - 序列关联。许多年前,当内存非常小时,程序员这样做是为了减少内存使用,知道不同的子程序在不同的时间使用变量。今天这样做的原因非常非常有限。大多数人不应该因为它容易混淆。 您还可以使用EQUIVALENCE语句设置序列关联。再次,最好避免。现代替代人们必须做“棘手”事物的时代需要EQUIVALENCE声明是TRANSFER功能。     
只是为了放大@MSB已经提到过的东西:COMMON块告诉编译器如何在内存中放置变量。几乎没有理由将它们与现代Fortran一起使用,即任何能够应对Fortran 90或更高版本的编译器,并且有充分的理由避免它们。 并且添加一件事:在现代Fortran中,您可以大致使用C结构对用户定义的类型执行的操作。检查您的文档TYPE。     

要回复问题请先登录注册