除非我弄错了,否则Fortran无法用任意数量的参数编写函数或子例程(更简洁地称为可变参数函数)。
例如:
RESULT = FUNC(A1, A2 [, A3 [, ...]])
我知道,我可以创建可选参数,但参数的数量是有限的,必须在函数定义中逐个手动声明。
那么Fortran编译器如何实现,MAX
或MIN
实际上是
RESULT = MAX(A1, A2 [, A3 [, ...]])
特别令人困惑的是,这些可变MAX
和MIN
函数是evidently,是Fortran 77标准的一部分。因此,实现这些功能的任何能力都必须在1977年左右提供。
答案 0 :(得分:7)
编译器支持可变函数,允许程序员编写一个接受可变数量参数的函数。
即使程序员看起来相同,Fortran中的MAX()也不需要是函数,可变参数或其他函数 - 它可以作为编译器内置的功能来实现,以识别一系列令牌和表达式,并根据需要发出尽可能多的代码(例如,发送到目标文件)以产生所需的结果。这可能涉及调用库函数,或者可能不会。
例如,给定
RESULT = MAX(A,B,C)
所需要的只是在句法分析中识别参数A
,B
和C
,并且(在声明/表达有效的情况下 - 例如三者都有相同的类型和类型)发出代码,遍历每个参数以找到最大值。
因此编译器可能会翻译类似
的内容 RESULT = MAX(A,B,C)
看起来像是(假设我们有一个发出C代码的Fortran编译器),比如
result = a;
if (b > result) result = b;
if (c > result) result = c;
并简单地向上面发出一些额外的逻辑来处理每个附加参数。
而且,是的,这种能力在1977年之前就存在于编译器中。这种能力是编译器的主要要点之一 - 自动化将程序员简单的东西转换成需要更复杂的逻辑的过程。