Я пытаюсь изучить Фортран, и я вижу много различных раздаваемых определений, и я задаюсь вопросом, пытаются ли они выполнить то же самое. Каково различие между следующим?
integer*4
integer(4)
integer(kind=4)
В Fortran >=90 лучшим подходом является использование внутренних функций для указания необходимой вам точности - это гарантирует как переносимость, так и то, что вы получите ту точность, которая вам нужна. Например, чтобы получить целые числа i
и my_int
, которые будут поддерживать по крайней мере 8 десятичных цифр, вы можете использовать:
integer, parameter :: RegInt_K = selected_int_kind (8)
integer (kind=RegInt_K) :: i, my_int
Определив RegInt_K
(или любое другое выбранное вами имя) как параметр
, вы можете использовать его во всем коде как символ. Это также упрощает изменение точности.
Запрашивая 8 или 9 десятичных цифр, вы обычно получаете 4-байтовое целое число.
integer*4
- распространенное расширение, восходящее к старому FORTRAN, для указания 4-байтового целого числа. Хотя этот синтаксис не является и никогда не был стандартным для Фортрана.
integer (4)
или integer (RegInt_K)
- это сокращение от integer (kind=4)
или integer (kind=RegInt_K)
. integer (4)
не то же самое, что integer*4
и является непортативным - стандарт языка не определяет числовые значения видов. Большинство компиляторов используют kind=4
для 4-байтовых целых чисел -- для этих компиляторов integer*4
и integer(4)
обеспечат тот же целочисленный тип -- но есть исключения, поэтому integer(4)
является непортативным и его лучше избегать.
Подход для reals аналогичен.
UPDATE: если вы не хотите указывать числовые типы по требуемой точности, но вместо этого по объему памяти, которую они будут использовать, Fortran 2008 предоставляет такой метод. Величины и целые числа могут быть указаны по количеству бит памяти после использования
модуля ISO_FORTRAN_ENV
, например, для целого числа размером 4 байта (32 бита):
use ISO_FORTRAN_ENV
integer (int32) :: MyInt
В руководстве gfortran есть документация по "внутренним модулям".