#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. Размещать ссылки обычно не рекомендуется, потому что ссылка может отключиться, и тогда ответ потеряет ценность. Лучшее предложение — процитировать соответствующие части контента по ссылке в вашем ответе и использовать ссылку в качестве ссылки для читателей, которые хотят получить более подробную информацию или которые хотят оценить источник.