我在互联网上看到了这段代码:dot_product(x, x)
这是Fortran中的“未定义行为”(由于别名)?
答案 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)
伪参数A
和B
各自与相同的实际参数C相关联
因此彼此。在执行期间,A
和B
都不会被定义
子例程XYZ
或XYZ
引用的任何过程。
因此标准限制了别名参数的修改而不是别名。