Ir para conteúdo
Fórum Script Brasil
  • 0

prototipo de funçao - não entendo


Violet

Pergunta

Ola pessoal,

Por favor alguém pode me ajudar a entender essa linha? Acho que é o prototipo de alguma funçao, mas eu procurei e não entendo o que cada parte significa.

Eu tirei essa linha do exemplo de estrutura das operaçoes de arquivo, do livro "The Linux kernel Module Programming Guide", pg 21.

ssize_t(*read) (struct file *, char __user *, size_t, loff_t *);

por exemplo porque read esta entre parenteses? e o asterisco antes quer dizer ponteiro? ssize_t é o tipo?

Se puderem me exclarecer me ajudariam muito.

obrigada.

ps: desculpem a falta de acentos, estou usando um teclado francês.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde,

O (*read) é o ponteiro para a função;

o ssize_t no começo é o tipo de retorno da função;

entre parenteses são os argumentos da função;

Um exemplo:

Imagine a função bubbleSort (ordenação) declarada da seguinte maneira:
void bubbleSort( TipoDados *vetor , int tamanhoDoVetor , int(*comparar)( TipoDados a , TipoDados b ) , void(*atribuir)( TipoDados *a , TipoDados b ) );

Os parâmetros:
int(*comparar)( TipoDados a , TipoDados b ) => É um ponteiro para uma função que retorna um inteiro e recebe 2 parâmetros do tipo "TipoDados"
void(*atribuir)( TipoDados *a , TipoDados b ) => É um ponteiro para uma função que retorna void e recebe 2 parâmetros do tipo "TipoDados" (sendo o primeiro um ponteiro)

Para você usar a função bubbleSort, seria mais ou menos assim:

int maior( TipoDados a , TipoDados b ){
    return a > b ? 1 : 0;
}
void atribuir( TipoDados *a , TipoDados b ){
     *a = b;
}

bubbleSort( _algumvetor , _algumInteiro , &maior , &atribuir );
&maior => Passa o endereço de memória da função
&atribuir => Passa o endereço de memória da função

Editado por p4t0X
Link para o comentário
Compartilhar em outros sites

  • 0

Nãão, então na função você tá usando um ponteiro para função.

Oh, vo tenta exemplificar:

#include <stdio.h>
int maior( int a , int b){
    return a > b ? 1 : 0;
}
int menor( int a , int b){
    return a < b ? 1 : 0;
}

int comparar( int (*funcao)( int num1 , int num2 ) , int a , int b ){
    //Dentro da função eu uso o nome do ponteiro para chamar a funcao

    /* Se eu usasse o nome explicito "maior" ele ia chamar sempre a função "maior"
     * que não é a intenção!
     * A intenção é chamar a função q é passada pelo primeiro parametro "funcao"
     */
    return funcao( a , b );
}

int main( int argc , char **argv ){
    
    //Lá na função comparar, a variavel "funcao" aponta para a função "maior";
    printf( "%d\n" , comparar( &maior, 5 , 6 ) );

    //Lá na função comparar, a variavel "funcao" aponta para a função "maior";
    printf( "%d\n" , comparar( &menor, 5 , 6 ) );
}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...