Ошибка: недопустимый символ в имени при (1)

#gcc #fortran #fortran90 #gfortran #mixed

#gcc #fortran #fortran90 #gfortran #смешанный

Вопрос:

Я пытаюсь скомпилировать файл fortran вместе с некоторыми файлами .h на FORTRAN. Файлы .h содержат определение для общих блоков переменной. Когда я компилирую их в Fortran, я получаю следующую ошибку:

 integer knue,ke,knumu,kmu,knutau,ktau,ku,kd,kc,ks,kt,kb,kgamma,
                                      1
Error: Invalid character in name at (1)
  

Код, в котором возникает эта ошибка, является,

Теперь мой вопрос в том, указывает ли это «1», где находится ошибка?

Строки кода, на которые указывает эта ошибка, являются,

 integer knue,ke,knumu,kmu,knutau,ktau,ku,kd,kc,ks,kt,kb,kgamma, 
     amp;     kw,kz,kgluon,kh1,kh2,kh3,khc,ksnue,kse1,kse2,ksnumu,ksmu1,
     amp;     ksmu2,ksnutau,kstau1,kstau2,ksu1,ksu2,ksd1,ksd2,ksc1,ksc2,
     amp;     kss1,kss2,kst1,kst2,ksb1,ksb2,kn1,kn2,kn3,kn4,kcha1,kcha2,
     amp;     kgluin,kgold0,kgoldc
  

Кроме того, что-то не так с тем, как используются продолжения? Я использую gfortran для компиляции этого файла.

Комментарии:

1. Являются ли код и компилятор одной и той же версией (FORTRAN77, FORTRAN90 или FORTRAN95)? FORTRAN77 основан на столбцах, тогда как FORTRAN90 / 95 допускает более свободный формат.

Ответ №1:

Похоже, что вы используете продолжения строк в стиле Fortran 77 и пытаетесь скомпилировать код свободного формата в стиле Fortran 90. Вам нужно либо скомпилировать с использованием опции gfortran -ffixed-form , либо отформатировать код, используя продолжения строк в стиле Fortran 90:

 integer knue,ke,knumu,kmu,knutau,ktau,ku,kd,kc,ks,kt,kb,kgamma, amp;
          kw,kz,kgluon,kh1,kh2,kh3,khc,ksnue,kse1,kse2,ksnumu,ksmu1, amp;
          ksmu2,ksnutau,kstau1,kstau2,ksu1,ksu2,ksd1,ksd2,ksc1,ksc2, amp;
          kss1,kss2,kst1,kst2,ksb1,ksb2,kn1,kn2,kn3,kn4,kcha1,kcha2, amp;
          kgluin,kgold0,kgoldc 
  

Ответ №2:

У меня возникла эта проблема при изменении scipy и попытке его компиляции. Для того, чтобы это сработало, была необходима следующая идентификация со звездочкой * в столбце 5. Это работает как для стилей Fortran 77, так и для 90.

       double precision a,abseps,abserr,alist,area,area1,area12,area2,
     * a1,a2,b,blist,b1,b2,correc,dabs,defabs,defab1,defab2,d1mach,
     * dmax1,dres,elist,epmach,epsabs,epsrel,erlarg,erlast,errbnd,
     * errmax,error1,error2,erro12,errsum,ertest,f,oflow,resabs,
     * reseps,result,res3la,rlist,rlist2,small,uflow,areav
  

Ответ №3:

Отвечая на ваш первый вопрос, да, «1» обычно обозначает точку в коде, где возникает ошибка. В остальном код как таковой выглядит нормально.

Ответ №4:

На самом деле столбец продолжения Fortran 77 находится под номером шесть.

http://web.stanford.edu/class/me200c/tutorial_77/03_basics.html

Комментарии:

1. Размещать ссылки обычно не рекомендуется, потому что ссылка может отключиться, и тогда ответ потеряет ценность. Лучшее предложение — процитировать соответствующие части контента по ссылке в вашем ответе и использовать ссылку в качестве ссылки для читателей, которые хотят получить более подробную информацию или которые хотят оценить источник.