funcoes.tex 4.83 KB
Newer Older
1 2 3 4
\documentclass[apostila.tex]{subfiles}


\begin{document}
5

Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
6 7
\chapter{Funções}

8 9
Uma função é uma seção independente de código em C. Designada por um nome, realiza uma tarefa específica e, opcionalmente,
retorna um valor ao programa que a chamou.
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
10 11 12

\section{Protótipo}

13
O protótipo da função fornece ao compilador uma descrição de uma função que
14
será definida posteriormente no programa. Ele inclui o tipo de
15
retorno, que indica o tipo de variável que a função retornará.
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
16
Além disso, ele inclui também o nome da função, os tipos de variáveis dos argumentos que
17
serão passados para a função e, facultativamente, o nome dos argumentos.
18
O protótipo sempre termina com `;'.
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
19

20 21 22
\begin{lstlisting}
tipo_de_retorno nome_funcao (tipo1 arg1,..., tipoN argN);
\end{lstlisting}
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
23 24 25

\section{Definição}

26 27
É a função propriamente dita, a definição contém as instruções que serão executadas.
A primeira linha, chamada de cabeçalho, deve ser idêntica ao protótipo da função com exceção do ponto-e-vírgula final.
28
Os nomes das variáveis usadas como argumentos devem necessariamente
29 30
ser incluídos no cabeçalho. A seguir vem o corpo, contendo, em um bloco, as
instruções que a função executará.
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
31
Se o tipo de retorno da função não for void, uma
32
instrução return deve ser incluída para retornar um valor compatível com o
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
33 34
tipo de retorno especificado.

35 36
\vspace*{\fill}

Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
37
\begin{lstlisting}
38
tipo_de_retorno nome_funcao(tipo1 arg1, ..., tipoN argN)
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
39 40 41 42 43
{
	instruções;
}
\end{lstlisting}

44

Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
45 46
\subsection{Tipo de retorno}

47 48
Especifica o tipo de dado que a função deverá retornar ao programa
que a chamou. O tipo pode ser qualquer dos tipos válidos em C ou um
49
tipo definido pelo programador. A função também pode não retornar nenhum valor.
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
50 51

\begin{lstlisting}
52 53
int func1(...) // retorna um tipo int
void func2(...) // não retorna dados
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
54 55
\end{lstlisting}

56 57
Para retornar um valor a partir de uma função, é usada a palavra-chave return
seguida por uma expressão válida em C. Quando a execução atinge a instrução
58
return, esta expressão é avaliada e o valor é transmitido para o programa que
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
59 60 61 62 63
originou a chamada. O valor de retorno de uma função é o valor da expressão.

\begin{lstlisting}
int func1(...)
{
64 65
	int x; // declaracao da variavel
	... // demais instrucoes
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
66
	...
67

68
	return x*2; // retorna x*2
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
69 70 71
}
\end{lstlisting}

72

Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
73 74
\subsection{Nome da função}

75
É possível o uso de qualquer nome desde que siga as regras adotadas para atribuir
76
nomes de variáveis em C. O nome da função deve ser único e é sempre
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
77 78 79 80
aconselhável usar um nome que reflita a finalidade da função.

\subsection{Corpo da função}

81
É delimitado por chaves e colocado imediatamente após o cabeçalho da função.
82
Quando uma função é chamada, a execução começa no início do corpo e termina -- retornando ao programa de origem -- quando uma instrução return é encontrada
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
83 84
ou quando a execução chega ao final do bloco.

85 86 87 88
Podemos declarar variáveis dentro do corpo de uma função. Estas variáveis
são chamadas de variáveis locais, significando que são privativas desta
função e distintas de outras variáveis com o mesmo nome que possam ter sido
declaradas em outras partes do programa. A declaração destas variáveis deve
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
89 90 91 92 93 94
ser feita antes de qualquer instrução.

\section{Chamada de funções}

\subsection{Chamadas por valor}

95 96 97
Quando uma variável é passada para uma função pelo valor, a função tem
acesso ao valor da variável, mas não à própria variável original.
Portanto, as instruções contidas na função não podem modificar o valor da
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
98 99 100 101
variável original.

\subsection{Chamadas por referência}

102
Neste caso, a função recebe o endereço de memória, uma referência do
103
parâmetro, ao invés do valor do parâmetro. Desta forma, a função pode alterar
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
104
o valor da variável mediante a utilização deste endereço.
105
Tanto a função quanto o programa devem ser informados de que um parâmetro é
106 107
chamado por referência utilizando os operadores \& -- para passar um endereço --
e * -- para receber um endereço.
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
108

109
Exemplo:
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
110 111 112 113 114

\lstinputlisting{exemplos/funcao_parametro_por_valor_e_referencia.c}



115
A saída será:
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
116 117 118 119 120 121
\begin{verbatim}
Antes de chamar por valor() : x = 2, y = 4, z = 6
Depois de chamar por valor(): x = 2, y = 4, z = 6
Depois de chamar por ref()  : x = 0, y = 0, z = 0
\end{verbatim}

122

Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
123
Obs.:
124
\begin{description}
125
	\item[\&]: Passa o endereço de memória da variável passada por parâmetro e,
126
		portanto, as modificações sobre esta variável realizadas na função são permanentes.
127
	\item[*]: Acessa o conteúdo de tal endereço de memória.
128
\end{description}
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
129 130 131 132 133 134 135 136


\section{Exemplo de função}

\lstinputlisting{exemplos/exemplo_funcao.c}



137
\section*{Exercícios}
Jomaro Rodrigues's avatar
Jomaro Rodrigues committed
138 139

1. Transforme o programa que detecta se um número é primo em uma função.
140

141
2. Escreva uma função que gera e imprime os primeiros n números primos,
142
sendo que n é o parâmetro desta função.
143

144
\end{document}