Почему ФОРТРАН ПОИНТЕР требует ЦЕЛЬ? - PullRequest
14 голосов
/ 19 января 2011

Почему спецификация Fortran 90 указывает (5.2.8), что ключевое слово TARGET должно использоваться для привязки к нему указателя?Почему не каждый тип является допустимым TARGET?

Например, INTEGER, POINTER :: px INTEGER, TARGET :: x x = 5 px => x - это допустимый синтаксис, но INTEGER, POINTER :: px INTEGER :: x x = 5 px => x - это , недействительно .

Почему это должно быть?

Ответы [ 3 ]

17 голосов
/ 19 января 2011

Элемент, на который можно указать, может быть связан с другим элементом, и компилятор должен разрешить это.Элементы без атрибута target не должны быть псевдонимами, и компилятор может делать предположения на основе этого и, следовательно, создавать более эффективный код.

2 голосов
/ 19 января 2011

Указатели в фортране отличаются от указателей в ц. В Фортране 90 указателей были снабжены несколькими ограничениями, такими как наличие цели. Это было сделано для решения проблемы скорости и для обеспечения безопасного использования указателя. Хотя при одном вызове можно выделить указатели, которым не нужно указывать цель. Копайте глубже, и вы найдете их !!

0 голосов
/ 19 января 2011

Для лучшей оптимизации компилятора. Когда ваш код работает на ядрах 1K-100K, скорость имеет значение.

Кстати, цель не всегда используется. Например, в ситуациях, когда указатель используется для выделения памяти.

...
real, pointer :: p(:), x
...
allocate(p(15))
...
x => p(1:5)
...
nullify(x)
deallocate(p)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...