wake-up-neo.com

Ist void * function () ein Zeiger auf function oder eine Funktion, die void * zurückgibt?

Ich bin verwirrt über die Bedeutung von void *function().
Ist es ein Zeiger auf eine Funktion oder eine Funktion, die void* Zurückgibt? Ich habe es immer für Datenstrukturen als rekursive Funktion verwendet, die einen Zeiger zurückgibt, aber als ich einen Code im Multithreading (pthread) sah, gab es dieselbe Funktionsdeklaration. Jetzt bin ich verwirrt, was der Unterschied zwischen ihnen ist.

26
user9515151

Deklarationen in C/C++ werden vom Bezeichner nach außen nach der Priorität des Operators gelesen.

Ein kurzer Blick auf die Prioritätstabelle für C/C++ - Operatoren in Wikipedia zeigt, dass der Funktionsaufrufoperator () Eine höhere Priorität hat als der Indirektionsoperator *. Ihre Funktionsdeklarationen lauten also wie folgt:

  • Beginnen Sie mit der Kennung: function ist

  • function() eine Funktion, die keine Argumente akzeptiert

  • void* function() und gibt einen void* zurück.

Dieses allgemeine Prinzip gilt auch für Array-Deklarationen ([] Hat ebenfalls eine höhere Priorität als *) Und Kombinationen der beiden. So

int *(*arr[42])();

wird gelesen als

  • arr ist
  • arr[42] Ein Array von 42 Elementen
  • *arr[42] Zeigt auf
  • (*arr[42])() Funktionen, die keine Argumente annehmen und
  • int *(*arr[42])() gibt einen int* zurück.

Es dauert ein bisschen, bis man sich daran gewöhnt hat, aber wenn man das Prinzip verstanden hat, ist es einfach, diese Erklärungen eindeutig zu lesen.