Definição de tipos
Um dos recursos interessantes fornecidos pela linguagem C consiste na possibilidade de declararmos nossos próprios tipos de dados, a partir da combinação de tipos de dados já fornecidos pela própria linguagem.
A utilidade disso pode parecer banal, mas vamos relembrar a declaração de um ponteiro para uma função. Como discutido nas aulas, essa operação tem uma sintaxe potencialmente desagradável visualmente:
int (*funcaoPtr)(int, int) = nomeDaFuncao;
Agora, imagine criarmos um tipo de dado chamado meuTipo
, capaz de armazenar ponteiros para funções que recebem dois inteiros como parâmetro e retorna um número inteiro. Esse recurso pode tornar o nosso código mais legível. Veja como ficaria:
meuTipo funcaoPtr = nomeDaFuncao;
Bem melhor, não?
🧑💻 Do conceito ao código
Para sair do campo das ideias, usaremos o typedef
, uma palavra-chave em C que permite criar um apelido ("alias" ou um novo nome) para um tipo de dado. O uso do typedef
é representado pela sintaxe a seguir:
typedef opcoes nomeDoSeuTipo;
Agora, vamos trabalhar com a criação de um tipo de dado que consiste em ponteiro para inteiro, com a intenção de evitar o uso de int*
repetidas vezes.
typedef int* intp;
A partir de agora, intp
é um tipo de dado válido, um apelido para int*
. Acompanhe o código a seguir:
#include<stdio.h>
#include<stdlib.h>
typedef int* intp;
int main(void){
int a = 10;
intp aPtr = &a;
printf("A -> Valor: %d Endereço: %p | aPtr: %p", a, &a, aPtr);
return 0;
}
🧙 Definindo um tipo de ponteiro para função
Enfim, chegamos à questão inicial: como podemos criar um tipo de dado que contemple um ponteiro para função? Para isso, vamos relembrar como funciona a declaração de um ponteiro para função:
int (*funcaoPtr)(int, int);
Para declararmos um tipo de dado, pf
, usaremos typedef
:
typedef int (*pf)(int, int);
Com o programa completo, temos:
#include<stdio.h>
#include<stdlib.h>
typedef int (*pf)(int, int);
int somar(int a, int b){
return a + b;
}
int main(void){
pf funcao;
funcao = somar;
int resultado = funcao(5,7);
printf("Resultado: %d\n", resultado);
return 0;
}
📖 Bibliografia
Livros
- Backes, A. (2018). Linguagem C - Completa e Descomplicada.
Sites