在Fortran中,函数和子例程之间存在明显的区别:函数返回一个值,子例程不返回任何值.这引入了两者之间的一系列差异.一个例子是调用语义:你可以像在其他语言中一样调用函数,但是为了调用子例程,你必须首先发出一个call语句.
通过在Fortran95中添加指针和数据类型,似乎没有任何技术限制可以使任何子程序成为一个函数,并保留子程序仅用于遗留.函数可以返回零(您只返回一个虚拟整数),一个或多个值(例如,您可以返回指向类型的已分配实例的指针,如C++ STL对).
我错了吗?由于子程序具有的功能和功能没有,我们是否还需要Fortran编程中的子程序?
jan*_*neb 18
如果搜索comp.lang.fortran存档,您将找到有关函数语义的讨论.IIRC事实证明,标准中没有明确规定具有副作用的功能是什么和不允许的功能.
例如,编译器可以优化
x = foo(args)+ foo(args)
成
x = 2*foo(args)
或者换个例子,考虑一下
x = y + foo(y)
如果foo()改变了y的值怎么办?请记住,Fortran没有序列点的C概念.
一般来说,几位专家的建议只有在纯函数时才使用函数,否则使用子程序.而且,这也是我跟随自己的建议.
我不认为子程序会去任何地方.大多数其他语言允许使用和不返回值的方法.我看不出有什么理由说这是件坏事.不应该动摇任何人改变一件事.
Legacy一个人说,只要Fortran这样做,子程序就会持续存在.只要Fortran存在,编写一个执行操作并且不返回任何内容的方法就没有错.
更新:
你为什么说"麻烦"?有什么大不了的?我不同意子程序在适当的情况下使用时"麻烦"的想法.
自版本77以及可能更早版本以来,Fortran一直在区分函数和子例程.其他C系列语言也可以.为什么这突然间这么麻烦?即使是长时间使用指针和对象的语言也有返回void的方法.
| 归档时间: |
|
| 查看次数: |
3795 次 |
| 最近记录: |