нужно утверждение DATA в современном Fortran? - PullRequest
2 голосов
/ 09 апреля 2019

Я как бы знаю поведение оператора data в фортране. Однако я не знаю, есть ли какая-либо ситуация, где это предпочтительнее или этого следует избегать

Ответы [ 2 ]

2 голосов
/ 20 мая 2019

Мне лично нравится выражение data, когда инициализация моих переменных будет более понятной, чем при обычном присваивании. Например:

type gene
  character :: gene
  integer :: depth
  integer :: delta
end type

type(gene) :: pool(8)

! initializing in a data statement looks nicer in this case
data pool%gene  / '#', 'U', 'R',  '+',  '-',  '*',  '/',  '^'/
data pool%depth /  0 ,  0 ,  1 ,   2 ,   2 ,   2 ,   2 ,   2 /
data pool%delta /  1 ,  1 ,  0 ,  -1 ,  -1 ,  -1 ,  -1 ,  -1 /
1 голос
/ 17 мая 2019

Оператор данных не устарел.Однако его использование среди исполняемых операторов устарело со времен Фортрана 95. Приложение B последнего стандарта Фортрана содержит подробную информацию об устаревших функциях.

B.3.5 Операторы DATA среди исполняемых файлов.Правила упорядочения операторов позволяют операторам DATA появляться в любом месте программного модуля после операторов спецификации.Возможность размещать операторы DATA среди исполняемых операторов очень редко используется, излишне и является потенциальным источником ошибок.

На странице 140 «Современного объяснения на Фортране» (зеленое издание от 2011 г., а не более новое красноередакция, которой у меня нет), Меткалф, Коэн и Рейд пишут

Мы рекомендуем использовать оператор объявления типа, а не оператор данных, но оператор данных должен бытьиспользуется, когда только часть переменной должна быть инициализирована.

Учитывая, что два автора являются членами WG5 (который отвечает за разработку Fortran ---на самом деле, возможно, все три автора являются членами (я не уверен насчет Майкла Меткалфа), мы можем с достаточной степенью уверенности сказать, что оператора данных следует избегать, если только он не инициализирует часть переменной, перед выполняемыми операторами в программном модуле.

...