Общие блоки в Фортране

У Фортрана есть общие блоки в общих блоках? Как будто есть структуры внутри структур. Например

integer int 1, int2
common/Common1/int1, int2
float f1, f2
common/Common2/f1, f2
save/Common2/, /Common1/

Означает ли приведенный выше код, что common2 находится внутри common1?

1 ответ

Решение

Нет, код, который вы написали, недействителен. Общий блок - это просто именованная область памяти.

Фортран имеет "производные типы данных", которые очень похожи на структуры Си. Объявление производного типа на Фортране выглядит так:

type float_struct
  real :: f1, f2
end type

Теперь вы можете объявить другой производный тип, который содержит переменную этого типа:

type my_struct
  integer :: int1, int2
  type (float_struct) :: my_float_struct
end type

Обратите внимание, что это объявления типа, а не экземпляры переменной этого типа. Лучше всего поместить объявления в модуль, что позволит вам получить к ним доступ в подпрограмме, функции или программе. Например, предположим, что описанные выше объявления помещены в модуль с именем "my_structs_mod". Тогда вы можете использовать их так:

subroutine sub()
use my_structs_mod
type (my_struct) :: ms
ms%int1 = 42
...
end subroutine

Обратите внимание, что знак процента (%) аналогичен оператору точки (.) В C. Он позволяет получить доступ к данным, содержащимся в производном типе.

Другие вопросы по тегам