У меня есть старый код Fortran, который меня попросил проанализировать и перевести на современный язык. Я не знаю, какой компилятор использовался в прошлом для компиляции кода, поэтому на данный момент я пытаюсь скомпилировать его с помощью gfortran. Код содержит заявление, как это было причины gfortran жаловаться:Неявное целое преобразование <--> логическое выражение в языке Fortran if
program test
implicit none
integer*4 :: var
var=.true.
if(var) then
write(*,*) "Hi"
endif
end program test
Компиляция это с gfortran дает следующее сообщение об ошибке:
test.f:6:9:
if(var) then
1
Error: IF clause at (1) requires a scalar LOGICAL expression
(Кроме того, это дает предупреждение о преобразовании сделано в var=.true.
).
Я не уверен, какой компилятор был скомпилирован, но, очевидно, код должен компилироваться как есть. Есть ли способ сказать gfortran принять это преобразование?
Согласно документации, не неявное преобразование не выполняется в случае, заявления, хотя: https://gcc.gnu.org/onlinedocs/gfortran/Implicitly-convert-LOGICAL-and-INTEGER-values.html
Я не могу ответить на вопрос (поскольку я не знаю, как получить gfortran для компиляции этого сломанного кода), но можете ли вы просто сделать 'var' логическим? – francescalus
Да, это сработает, но я бы предпочел не менять код. –
Совершенно разумное желание. Предупреждение, хотя: если в коде есть эти нестандартные части, тогда не сообщается, что еще происходит (что может вас удивить), о которых ваш компилятор не жалуется. Возможно, стоит посмотреть, какой компилятор был изначально использован. – francescalus