EMi*_*ler 5 fortran variadic variadic-functions fortran77 fortran95
除非我弄错了,否则Fortran无法用任意数量的参数编写函数或子例程(更简洁地称为可变参数函数).
例如:
RESULT = FUNC(A1, A2 [, A3 [, ...]])
我知道,我可以创建可选参数,但参数的数量是有限的,必须在函数定义中逐个手动声明.
那么Fortran编译器如何实现,MAX
或者MIN
实际上是
RESULT = MAX(A1, A2 [, A3 [, ...]])
特别令人困惑的是,这些可变参数MAX
和MIN
函数显然是Fortran 77标准的一部分.因此,实现这些功能的任何能力都必须在1977年左右提供.
编译器支持可变函数,允许程序员编写一个接受可变数量参数的函数.
即使程序员看起来相同,Fortran中的MAX()也不需要是函数,变量或其他 - 它可以作为编译器内置的功能来实现,以识别一系列令牌和表达式,并发出尽可能多的代码(例如,到目标文件)以产生所需的结果.这可能涉及调用库函数,或者可能不会.
例如,给定
RESULT = MAX(A,B,C)
Run Code Online (Sandbox Code Playgroud)
所有需要的是识别的参数,A
,B
,和C
在句法分析和(受语句/表达是有效的-诸如具有相同的类型和种类的所有三个)发射的代码,步骤在每个参数以找到最大.
所以编译器可能会翻译类似的东西
RESULT = MAX(A,B,C)
Run Code Online (Sandbox Code Playgroud)
进入看起来的东西(假设我们有一个发出C代码的Fortran编译器)
result = a;
if (b > result) result = b;
if (c > result) result = c;
Run Code Online (Sandbox Code Playgroud)
并简单地向上面发出一些额外的逻辑来处理每个附加参数.
并且,是的,这种能力在1977年之前就存在于编译器中.这种能力是编译器的主要要点之一 - 自动化将程序员简单的东西转换成需要更复杂的逻辑的过程.
归档时间: |
|
查看次数: |
5167 次 |
最近记录: |