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.

Author: EMiller, 2016-06-16

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.

Então o compilador pode traduzir algo como
  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.
 7
Author: Peter, 2016-06-16 21:26:54