24.07.2013 Views

Capítulo 8. Funções e Subrotinas - UFMG

Capítulo 8. Funções e Subrotinas - UFMG

Capítulo 8. Funções e Subrotinas - UFMG

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!