c++ - A função void*() é um ponteiro para a função ou uma função retornando um void*?




pointers function-pointers (3)

Estou confuso sobre o significado da void *function() .
É um ponteiro para a função ou uma função retornando void* ? Eu sempre o usei em estruturas de dados como uma função recursiva retornando um ponteiro, mas quando vi um código em multithreading ( pthread ), há uma mesma declaração de função. Agora estou confuso qual é a diferença entre eles.


É uma função que retorna um ponteiro para void .

Pense na sua declaração desta maneira:

void *(function());

Esta seria uma função retornando void (ou nada):

void (*function2)();

Pense na declaração acima desta maneira:

void ((*function2)());

Uma maneira muito mais fácil de escrever isso é usar typedef s:

typedef void *function_returning_void_pointer();
typedef void function_returning_nothing();

function_returning_void_pointer function;
function_returning_nothing *function2;

Isso geralmente elimina a confusão em torno dos ponteiros de função e é muito mais fácil de ler.


A função tem o tipo de retorno void * .

void *function();

Por isso, sempre prefiro separar o símbolo * do nome da função, como

void * function();

E como Jarod42 apontou em um comentário, você pode reescrever a declaração da função em C ++ usando o tipo de retorno à direita, como

auto function() -> void *;

Se você deseja declarar um ponteiro para funcionar, escreva

void ( *function )();

Ou

void * ( *function )();

Ou um ponteiro para função que retorna o ponteiro para função

void * ( *( *function )() )();

Sempre que não tenho certeza sobre problemas de sintaxe C, gosto de usar o utilitário cdecl ( versão online ) para interpretar para mim. Ele traduz entre sintaxe C e inglês.

Por exemplo, insiro seu exemplo de void *foo() e ele retornou

declare foo como função retornando o ponteiro para anular

Para ver como seria a outra sintaxe, eu declare foo as pointer to function returning void e ele retornou

vazio (* foo) ()

Isso se torna particularmente útil quando você tem vários níveis de previsão, estrelas ou colchetes em uma única expressão.





declaration