2016-11-25 5 views
1

Я компилирую свой gfortran-код с помощью Mingw. Я изо всех сил пытаюсь найти способ продолжения формулы на следующей строке кода. Я попытался использовать символ продолжения & в соответствии с инструкциями для стандартного кода Fortran, но он не работает.Продолжение строки с gfortran не работает

Мой код следующим образом:

program test 
    implicit none 
    real :: a 
    a=1.+ & 
    2. 
    print *,'Gfortran code ',a 
end program test 

и когда я пытаюсь скомпилировать его компилятор возвращает следующее заявление:

test.f:4.13: 
      a=1.+ & 
       1 
Error: Syntax error in expression at (1) 
test.f:5.8: 
      2. 
      1 
Error: Invalid character in name at (1) 

Как продолжать линии?

ответ

1

Для меня это сработало отлично. Здесь имя файла, содержание, исполнение команд и gfortran особенности:

test.f90:

program test 
    implicit none 
    real :: a 
    a=1.+ & 
    2. 
    print *,'Gfortran code ',a 
end program test 

скомпилирован с: gfortran test.f90:

бег с: ./a.out

выход: Gfortran code 3.00000000

gfortran версия gfortran -v:

Using built-in specs. 
COLLECT_GCC=gfortran 
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.7/lto-wrapper 
Target: x86_64-linux-gnu 
Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.2-5' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable- languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu 
Thread model: posix 
gcc version 4.7.2 (Debian 4.7.2-5) 

UPDATE:

Решение было изменить суффикс файла .f90.

reaon, почему это работает следующим образом: Файл .f90 интерпретируется как FORTRAN 90/95/2003/... стандарт (обратная совместимость). Если файл называется .f, он интерпретируется в соответствии со стандартом Fortran77 в Standard Fixed Format. В этом стандарте синтаксиса вы можете видеть, что первые 5 символов каждой строки должны быть пустыми. 6-й используется для продолжения линии.

следующие codeexample работы в синтаксисе Fortran77: test.f

 program test 
      implicit none 
      real :: a 
      a=1.+ 
    & 2. 
      write(*,*)'Gfortran code ',a 
     end program test 

Внимание к & в позиции номер 6! Ваш компилятор, похоже, игнорирует тот факт, что вы не придерживались стандартного фиксированного формата. Если я попытаюсь скомпилировать ваш код с помощью 77, я получаю массу ошибок, которые относятся именно к этой проблеме. Это случается время от времени (некоторые компиляторы также чувствительны к регистру, а другие нет).

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

Кстати, здесь приятно Fortran77 Tutorial.

+0

Теперь, когда мы выяснили, какое решение, см. Обновление моего ответа –

+0

Два решения ... 1) использовать.f90 для бесплатной формы 2) используйте -fixed как аргумент переключателя компилятора. (Вы можете использовать -free для .for и .fixed для .f90, если так хочется. – Holmz

+1

Привет, Маркус, вы правы, проблема была суффикс «.f90» и тот факт, что я не уважал Стандарты фиксированной формы. Спасибо за ваше время и подробный ответ, я ценю это. Вы спасли мне массу времени. –

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

  • Нет связанных вопросов^_^