Como as funções MAX e MIN são implementadas em Fortran sem suporte para funções variádicas?
a menos que esteja enganado, não há maneira de Fortran escrever uma função ou subrotina com um número arbitrário de argumentos (conhecido mais sucintamente como uma função variádica).
por exemplo:
RESULT = FUNC(A1, A2 [, A3 [, ...]])
Eu sei que posso criar argumentos opcionais, mas o número de argumentos é finito e deve ser declarado manualmente, um a um, na definição da função.
Então como é que o compilador Fortran é implementado, MAX
ou MIN
que são, em facto.
RESULT = MAX(A1, A2 [, A3 [, ...]])
o que é especialmente desconcertante, é que estas funções variádicas MAX
e MIN
são, evidentemente, parte do padrão Fortran 77. Portanto, qualquer que seja a capacidade existente para implementar estas funções deve ter estado disponível por volta de 1977.
1 answers
Uma função variádica é o suporte pelo compilador que permite a um programador escrever uma função que aceita um número variável de argumentos.
Mesmo se pode olhar o mesmo para um programador, MAX() em Fortran não é necessário para ser uma função de aridade variável ou de outra forma - que pode ser implementado como um recurso integrado no compilador reconhecer uma seqüência de tokens e expressões, e emitir a quantidade de código (por exemplo, para um arquivo de objeto) como necessário para produzir o resultado desejado. Que pode envolver chamar funções da biblioteca, ou não.
Por exemplo, dado
RESULT = MAX(A,B,C)
Tudo o que é necessário é o reconhecimento de que os argumentos, A
, B
, e C
durante a análise sintática e, (sujeito à declaração/expressão a ser válida - como todos os três tendo o mesmo tipo e espécie) emitir código de passos sobre cada argumento para encontrar o máximo.
RESULT = MAX(A,B,C)
Em algo que parece (assumindo que temos um Compilador Fortran que emite código C) como
result = a;
if (b > result) result = b;
if (c > result) result = c;
E simplesmente emitir um bit adicional de lógica para o acima para lidar com cada parâmetro adicional.
E, sim, essa capacidade existia em compiladores muito antes de 1977. Tal capacidade é um dos pontos primários de ter um compilador - automatizar o processo de conversão de algo simples para o programador em qualquer lógica mais complicada é necessária.