Capítulo 8. Funções e Subrotinas - UFMG
Capítulo 8. Funções e Subrotinas - UFMG
Capítulo 8. Funções e Subrotinas - UFMG
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
90 <strong>8.</strong>2. sub-programas<br />
77; nenhum mecanismo de controle existe para auxiliar o compilador e o linkador na tarefa de determinar a<br />
coerência entre as diferentes unidades de programas.<br />
Para gerar chamadas a sub-programas de forma correta, o compilador necessita conhecer certos detalhes<br />
destes sub-programas, como os seus nomes e o número, tipo e espécie dos argumentos. Em Fortran 90/95, esta<br />
tarefa é desempenhada pelos blocos de interface.<br />
No caso de rotinas intrínsecas, sub-programas internos e módulos, esta informação é sempre conhecida pelo<br />
compilador; por isso, diz-se que as interfaces são explícitas. Contudo, quando o compilador chama uma rotina<br />
externa, esta informação não é conhecida de antemão e daí a interface é dita implícita. Um bloco de interface,<br />
então, fornece a informação necessária ao compilador. A forma geral de um bloco de interface é:<br />
INTERFACE<br />
<br />
END INTERFACE<br />
Nesta forma, este bloco de interface não pode ser nomeado. Assim, a interface deixa de ser implícita e se torna<br />
explícita.<br />
O consiste das declarações FUNCTION ou SUBROUTINE, declarações dos tipos e espécies<br />
dos argumentos dos sub-programas e do comando END FUNCTION ou END SUBROUTINE. Em outras palavras,<br />
consiste, normalmente, em uma cópia exata do sub-programa sem seus comandos executáveis ou rotinas internas,<br />
cujas interfaces sempre são explícitas. Por exemplo,<br />
INTERFACE<br />
FUNCTION FUNC(X)<br />
REAL :: FUNC<br />
REAL, INTENT(IN) :: X<br />
END FUNCTION FUNC<br />
END INTERFACE<br />
Neste exemplo, o bloco fornece ao compilador a interface da função FUNC.<br />
Existe uma certa flexibilidade na definição de um bloco de interfaces. Os nomes (mas não os tipos e espécies)<br />
das variáveis podem ser distintos dos nomes mudos definidos na rotina ou usados na chamada da mesma e outras<br />
especificações podem ser incluídas, como por exemplo para uma variável local à rotina. Contudo, rotinas internas<br />
e comandos DATA ou FORMAT não podem ser incluídos.<br />
Um bloco de interfaces pode conter as interfaces de mais de um sub-programa externo e este bloco pode<br />
ser colocado na unidade de programa que chama as rotinas externas ou através do uso de módulos, como será<br />
discutido na seção <strong>8.</strong>3. Em qualquer unidade de programa, o bloco de interfaces é sempre colocado após as<br />
declarações de variáveis mudas ou de variáveis locais.<br />
Em certas situações, é necessário fornecer a uma rotina externa o nome de outra rotina externa como um de<br />
seus argumentos. Isto pode ser realizado de duas maneiras:<br />
1. Usando o atributo ou declaração EXTERNAL, como foi realizado na subrotina bascara, na página <strong>8.</strong>2.6.<br />
2. Com o uso de um bloco de interface. Neste caso, a interface indicará ao compilador que um determinado<br />
nome consiste, na verdade, no nome de um outro sub-programa.<br />
As situações onde isto pode ocorrer são discutidas na seção <strong>8.</strong>2.12<br />
Como exemplo do uso de interfaces explícitas será apresentado o programa bascara3, o qual chama novamente<br />
as rotinas bascara e testa_disc. Este programa está listado nas páginas 91 e 92.<br />
<strong>8.</strong>2.8 Argumentos com palavras-chave<br />
Argumentos com palavras-chave (keyword arguments) são um recurso já utilizado em comandos de Entrada/Saída<br />
(E/S) no Fortran 77:<br />
READ(UNIT= 5, FMT= 101, END= 9000) X,Y,Z<br />
onde UNIT, FMT e END são as palavras-chave. Elas indicam, respectivamente, o número da unidade de acesso<br />
para leitura, o rótulo do comando de formato e o rótulo para onde o controle de fluxo deve ser desviado quando<br />
se atingir o ponto final de entrada dos dados.<br />
Em Fortran 90/95, argumentos com palavras-chave podem ser utilizados não somente em comandos de E/S,<br />
mas também em rotinas. Quando uma rotina tem diversos argumentos, palavras-chave são um excelente recurso<br />
Autor: Rudi Gaelzer – IFM/UFPel Impresso: 23 de abril de 2008