akaGM
Platinum Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору BagaBaga Цитата: Есть проблема. Сразу скажу, что в фортране я абсолютный нуль, поэтому вопрос может оказаться глупым. Пришла необходимость запустить программу под Solaris, в комплекте с которой идет SunStudio 11, в которой есть и фортран. Проблема в том, что программа писалась под FPS, в основном, в фиксированном формате и почти полностью в f77, хотя есть смешанные участки. Из нового используется только выделение (allocate) памяти. Так вот, возникли проблемы: ругается на такое character*(*) Name[far,reference] ^ ^ ^ вообще, ничего в скобках не принимает, вероятно, это особенность МС Была проблема с allocatable: integer*1 nf1[allocatable](:, ^ Заработало вот так integer(KIND=1), allocatable :: nf1(:, В предшествующем пример такая модификация не помогает, т.к. он слова far,reference не воспринимает как служебные. Возникла проблема с I/O Для определения конца файла используется функция EOF, которую, если верить диагностике, Sub\n fortran не знает open(1,file=IniFileName) do while (.not.EOF(1)) В диагностике ругается, что возвращается не логическое значение, если выписать отдельно EOF(1) при линковке не находит EOF | если reference используется в подпрограмме, то наплюй -- всё равно это дефолт а вот с этим... Код: open(1,file=IniFileName) do while (.not.EOF(1)) | я такие вещи обхожу вот так: Код: ioerror = 0 FP = 7 ! ну заняты в Форе каналы 1-6! open(FP, file=IniFileName) do while (.true.) ... read(FP, *, iostat=ioerror) x, y if (ioerror .lt. 0) exit ! eof if (ioerror .gt. 0) exit ! io error enddo close(FP) * или лучше вот так: ioerror = 0 FP = 7 open(FP, file=IniFileName) do while (ioerror .eq. 0) ... read(FP, *, iostat=ioerror) x, y enddo close(FP) | как-то синтетически, но работает -- стандарт бубёнать... | Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 15:23 16-03-2007 | Исправлено: akaGM, 16:14 16-03-2007 |
|