gfortran - назначить строку для параметра

[ПРИМЕЧАНИЕ: содержит повторение предыдущего вопроса, но публикуется отдельно как отдельные выпуски]

Я собираю программу, которая, как известно, компилируется с ifort, используя gfortran. Однако компилятор не работает на линии

PARAMETER (POS='^')  

с ошибкой компиляции:

conv_prof.mac:9.21:
    Included at conv_prof.f:811:

      PARAMETER (POS='^')                                               
                 1
Error: Can't convert CHARACTER(1) to REAL(4) at (1)
make: *** [conv_prof.o] Error 1

Как оказалось, параметр POS не используется (это, вероятно, устаревший параметр), поэтому я могу просто раскомментировать эту строку для компиляции, но я хотел бы знать, может ли кто-нибудь иметь представление о том, почему это проблема в gfortran, а не в ifort?

Ура,

Дерек

2 ответа

Компилятор Intel является потомком длинной линейки компиляторов Fortran. Его предки реализовали все виды нестандартного поведения, и, в истинном духе Fortran, последние версии компилятора должны компилировать самые древние коды. Вы часто можете сказать ifort предупреждать о нестандартных функциях в ваших кодах путем разумного использования флагов компилятора.

Gfortran, с другой стороны, не принимает (по умолчанию) много способов нестандартного синтаксиса, кроме тех форм нестандартного синтаксиса, которые так широко используются, что многие ничего не подозревающие программисты считают, что они являются стандартными формами (например real*4 и тому подобное).

Ваш фрагмент выглядит так, будто я приехал в дни, предшествующие FORTRAN77, когда язык не признавал существование таких новомодных идей, как нечисловые переменные. В этом случае я рекомендую вам следовать gfortran при запрете этого кода, а не Intel Fortran.

Особое расширение здесь заключается в том, что ifort позволяет программе "назначать" символьное значение в реальный объект. Возможно, оно было предназначено для использования этого расширения, но более вероятным объяснением является то, что оператор объявления типа для параметра pos отсутствует до утверждения PARAMETER.

Технически я не думаю, что стандарт требует диагностики в этом случае (это не нарушение правил синтаксиса или ограничений стандарта - это нарушение требований, предъявляемых к программе в основном тексте), но вы Я получу диагностику от ifort, если вы включите проверку стандартов (/stand или же -standв зависимости от вашей платформы).

Другие вопросы по тегам