为什么Fortran POINTER需要TARGET?

Ste*_*eve 15 fortran pointers

为什么Fortran 90规范指定(5.2.8)必须使用TARGET关键字将POINTER与之关联?为什么不是每种类型都是有效的TARGET?

例如,

INTEGER, POINTER :: px
INTEGER, TARGET :: x
x = 5
px => x
Run Code Online (Sandbox Code Playgroud) 有效的语法,但是
INTEGER, POINTER :: px
INTEGER :: x
x = 5
px => x
不是有效.

为什么一定要这样?

M. *_* B. 18

可能指向的项可能别名为另一个项,编译器必须允许这样做.没有目标属性的项目不应该是别名,编译器可以基于此进行假设,从而生成更有效的代码.