这在Fortran中是否合法:dot_product(x,x)?

时间:2013-12-18 05:27:18

标签: fortran

我在互联网上看到了这段代码:dot_product(x, x)这是Fortran中的“未定义行为”(由于别名)?

2 个答案:

答案 0 :(得分:4)

不,那里没有未定义的行为,矢量与自身的点积很好定义。函数定义不需要对输入参数进行任何修改,它实际上是一个奇怪的实现,它修改了它们。

(2003和2008)标准对重叠(或别名但不是标准使用的语言)的参数的限制仅适用于过程尝试重新定义此类参数的情况。内部dot_product的情况并非如此,其标准中定义的参数具有intent(in)

答案 1 :(得分:0)

我终于找到了FORTRAN 77 ANSI标准对此有何看法:

15.9.3.6实体关联限制

如果子程序引用导致引用的子程序中出现伪参数 两者都与引用的子程序中的另一个伪参数相关联 伪子参数可能在执行该子程序期间被定义。对于 例如,如果子程序以

为首
SUBROUTINE XYZ (A,B)

并由

引用
CALL XYZ (C,C)

伪参数AB各自与相同的实际参数C相关联 因此彼此。在执行期间,AB都不会被定义 子例程XYZXYZ引用的任何过程。

因此标准限制了别名参数的修改而不是别名。