2014-11-27 3 views
1

Я пытался выяснить смысл этих двух строк кода на некоторое время теперь:Интерпретация линии Кодекса Fortran

TYPE(DGRID),TARGET,ALLOCATABLE :: DGRIDS(:) 

...

JEK  => DGRIDS(IMOD)%JEK 

Я использование блоков кода и IMOD показано зеленым шрифтом, что, по-видимому, указывает на то, что IMOD является неотъемлемой функцией. Я понимаю, что вторая строка устанавливает указатель, но я не могу понять, почему существует внутренняя функция. Я также не понимаю, как JEK можно использовать дважды - разве две «JEK» во второй строке относятся к разным объектам?

+1

Я не уверен, что 'IMOD' - это функция, представляющая собой синтаксис массива a la' dgrids [imod] 'в C, например. Это также поддерживается 'DGRIDS (:)', который выглядит подозрительно, как массив. – paxdiablo

ответ

5

@ комментарий paxdiablo является место, я просто немного расширить на нем в тщеславной погоне за респ ...

TYPE(DGRID),TARGET,ALLOCATABLE :: DGRIDS(:) 

объявляет массив вещей типа dgrid. Из этого, а с другой линией, показанной, безусловно, в другом месте в коде есть заявление, о котором

type :: dgrid 
    ... 
    <type> :: jek 
    ... 
end type 

является Выделенный фрагмент. Итак, jek (я так же нечувствителен к случаю, как и сам Fortran) используется как имя элемента типа dgrid.

Линия

JEK  => DGRIDS(IMOD)%JEK 

связывает указатель называется jek с элементом jek из imod -го элемента массива dgrids. Где-то в коде является декларацией, как этот

<type_of_jek>, pointer :: jek 

Если CodeBlocks говорит вам, что imod функция это вас в заблуждение, даже функция без аргументов не будет называться imod(). imod должно быть целым числом.

Имя использовано jek использовано дважды, оно определяет различные вещи. Возможно, пальцы программиста устали печатать DGRIDS(IMOD)%, и программист напал на идею использования jek в качестве сокращенного псевдонима для DGRIDS(IMOD)%JEK. С ультрасовременным компилятором то же самое можно реализовать с помощью инструкции associate, хотя это не общая замена указателей Fortran, а просто альтернативный механизм определения псевдонимов.

+0

Как правило, он не согласен сказать «спасибо» в комментариях, но в этом случае это настолько ясно и полезно, что я не могу остановиться. Кроме того, я хотел бы сказать, что вы на 100% прав насчет существования упомянутых вами заявлений, которые я впоследствии нашел. Черт возьми, ты хорош. – boxofchalk1

Смежные вопросы