Linguagem C: Funções

De Aulas

Links relacionados: Programação em C

O que são funções?

As funções servem para que possamos reaproveitar partes do nosso código que são frequentemente utilizadas. Pode ser uma função matemática, um trecho de execução etc. Um outro motivo de se utilizar funções é para que possamos modularizar nosso código e separando-o em partes com funcionalidades específicas para que o mesmo seja mais fácil de se entender visualmente.

Exemplo

 1#include <stdio.h>
 2
 3int soma(int a, int b) {
 4    return a + b;
 5}
 6
 7int main() {
 8    int m = 4, n = 5;
 9    printf("A soma de %d com %d é %d\n", m, n, soma(m, n));
10}

Protótipo de funções

Na linguagem C, para que possamos utilizar uma função, é necessário que tenha sido implementada antes da sua chamada. Contudo, muitas vezes precisamos chamar uma função que aparece depois, ou mesmo, queremos deixar as funções em uma ordem que seja mais fácil para nos organizar. Para isso utilizamos o recurso de protótipo de funções, em que avisamos ao código que essas funções existem no código antes mesmo dela ser implementada.

Exemplo 1

 1#include <stdio.h>
 2
 3// Protótipo da função
 4int soma(int, int);
 5
 6int main() {
 7    int m = 4, n = 5;
 8    printf("A soma de %d com %d é %d\n", m, n, soma(m, n));
 9}
10
11int soma(int a, int b) {
12    return a + b;
13}


Exemplo 2

 1#include <stdio.h>
 2
 3// Mais ou menos como constantes globais
 4#define TRUE    1
 5#define FALSE   0
 6
 7int eh_par(int a) {
 8    int resto = a % 2;
 9    if (resto > 0) {
10        return FALSE;
11    }
12    return TRUE;
13}
14
15int main() {
16    while (TRUE) { // Laço infinito
17        int numero;
18        printf("Número (0 para sair): ");
19        scanf("%d", &numero);
20        if (numero == 0) {
21            return 0; // Sai do programa
22        }
23        if (eh_par(numero)) {
24            printf("O número %d é par.\n", numero);
25        } else {
26            printf("O número %d é impar.\n", numero);
27        }
28    }
29}

Passagem de Parâmetros

O C é uma linguagem que permite que passemos parâmetros para uma função tanto por valor, quanto por referência. Na passagem por valor, é passada uma cópia do valor da variável, enquanto que na passagem por referência, é passada uma referência à própria variável. Tal premissa independente do tipo da variável, ou seja, não importa se o tipo de uma variável é primitivo ou complexo.

Passagem de Parâmetro por Valor: No código exemplo abaixo, a variável a da função valor recebeu uma cópia do valor de x. Quando a função alterou este valor, ela estava alterando uma cópia e não afetou o valor da variável original x.

Passagem de Parâmetro por Referência: Contudo, a variável b da função referencia recebeu um ponteiro (ou um link) para a variável x na função main. Dessa forma, ao alterar o conteúdo da variável b dentro da função referencia, na verdade estamos alterando o conteúdo de x no programa principal.

Exemplo

 1#include <stdio.h>
 2#include <stdlib.h>
 3
 4// Passagem de parâmetro por valor
 5void valor(int a) {
 6	a = a + 1;
 7}
 8
 9// Passagem de parâmetro por referência
10void referencia(int *b) {
11	*b = *b + 1;
12}
13
14int main() {
15	int x = 4;
16	printf("x = %d\n", x);
17	valor(x);
18	printf("x = %d\n", x);
19	referencia(&x);
20	printf("x = %d\n", x);
21	return 0;
22}

Exercícios

1. Fazer uma função que retorna a soma, a diferença e o produto entre dois números.

2. Faça uma função que passa dois inteiros como parâmetro e troca seus valores. Faça um programa que utilize essa função.

3. Fazer uma função em C que retorna a razão entre dois números. A função deve retornar pelo comando return o valor 1 se a operação foi possível e o valor 0 se a operação não foi possível (divisão por zero, por exemplo). O resultado da divisão deve retonar por um parâmetro por referência.

4. Fazer uma função para ler e retornar o valor das 3 notas de um aluno.