在 Fortran 中,函数和子例程之间存在明显的区别:函数返回一个值,子例程不返回任何值。这引入了两者之间的一系列差异。一个例子是调用语义:您可以像在其他语言中一样调用函数,但是为了调用子例程,您必须发出call
首先声明。
随着 Fortran95 中添加的指针和数据类型,使任何子程序成为函数以及保留子例程仅用于遗留似乎不再存在技术限制。函数可以返回零(您只返回一个虚拟整数)、一个或多个值(例如,您可以返回指向已分配类型实例的指针,如 C++ STL 对)。
我错了吗?由于子例程具有而函数没有的某些功能,我们在 Fortran 编程中是否仍然需要子例程?
如果您搜索 comp.lang.fortran 档案,您会找到有关函数语义的讨论。 IIRC 事实证明,标准中没有明确规定对于具有副作用的函数,什么是允许的,什么是不允许的。
例如,编译器可以优化吗?
x = foo(参数) + foo(参数)
into
x = 2 * foo(参数)
或者再举一个例子,考虑
x = y + foo(y)
如果 foo() 改变 y 的值怎么办?请记住,Fortran 没有 C 语言中的序列点概念。
一般来说,一些专家的建议是仅使用纯函数,否则使用子例程。而且,这也是我自己遵循的建议。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)