Was bedeutet diese C-Anweisung?

Lesezeit: 1 Minute

Dabei bin ich auf diese Zeile gestoßen:

void (*(*x)(void (*[10])(int *)))(int *)

Kann mir jemand sagen was es ist?

  • Ist das ein Quiz oder so? 🙂

    – FehlgeschlagenDev

    23. November 2011 um 21:46 Uhr

  • Das ist einfach zu beantworten: Es ist ein Durcheinander.

    – Jerry Sarg

    23. November 2011 um 21:46 Uhr

  • Die Antwort ist immer cdecl.org.

    – Matt K

    23. November 2011 um 21:46 Uhr


  • @mkb: “deklariere x als Zeiger auf Funktion (Array 10 von Zeiger auf Funktion (Zeiger auf int) gibt void zurück) gibt Zeiger auf Funktion zurück (Zeiger auf int) gibt void zurück” – Nun, das klärt es auf

    – BlueRaja – Danny Pflughoeft

    23. November 2011 um 21:48 Uhr

  • Bitte sagen Sie mir, dass Sie dies nicht in einem tatsächlichen Code gefunden haben, der tatsächlich irgendwo verwendet wird … sondern möglicherweise in einem Eintrag eines verschleierten Wettbewerbs 🙂 ?

    – Scharlachroter Amaranth

    23. November 2011 um 21:49 Uhr

Benutzer-Avatar
Jess gut

Um dies selbst aufzuschlüsseln, beginnen Sie mit den innersten Klammern und arbeiten Sie sich nach außen vor.

  1. (*[10]) <---- Array von 10 Zeigern
  2. (*[10])(int *) <------ Array von 10 Zeigern auf Funktionen, auf die ein Zeiger vorhanden ist int als sein Argument
  3. (void (*[10])(int *)) <------ Array von 10 Zeigern auf Funktionen, auf die ein Zeiger vorhanden ist int als sein Argument und kehrt zurück void
  4. (*x)(void (*[10])(int *)) <------- x ist ein Zeiger auf eine Funktion, die als Argument hat (ein Array von 10 Zeigern auf Funktionen, die einen Zeiger auf int als Argument haben und zurückgeben void)

…..

Ich habe mittendrin aufgehört, aber hoffentlich hilft das.

Benutzer-Avatar
Seth Carnegie

cdekl ist sehr hilfreich für so etwas. Es sagt:

deklarieren Sie x als Zeiger auf die Funktion (Array 10 des Zeigers auf die Funktion (Zeiger auf int), der void zurückgibt), der Zeiger auf die Funktion zurückgibt (Zeiger auf int), der void zurückgibt

Benutzer-Avatar
Alexej Frunze

Erläuterungen finden Sie hier:

  • @Shahbaz: Was ist daran lustig?

    – Alexey Frunze

    23. November 2011 um 22:30 Uhr

  • Ich meine, lustig, wie ich es genossen habe, deshalb hast du die +1 bekommen

    – Shahbaz

    23. November 2011 um 22:35 Uhr

  • Habe die Deklarationen nie als Spirale gesehen!

    – Shahbaz

    23. November 2011 um 22:35 Uhr

  • @Shahbaz: Es ist mir auch nicht in den Sinn gekommen, bis ich einen Artikel (3. Link) darüber gesehen habe. Es ist nicht so komplex. Verworren (Wortspiel beabsichtigt) und kontraintuitiv, ja.

    – Alexey Frunze

    23. November 2011 um 22:39 Uhr

  • @deathly809 dann repariere es.

    – Alexey Frunze

    15. August 2014 um 8:40 Uhr

Ein Zeiger auf eine Funktion, die ein Array von 10 Zeigern auf Funktionen mit int *-Argument und Rückgabetyp void als Argument hat und einen Zeiger auf eine Funktion mit int *-Argument und Rückgabetyp void zurückgibt.

Quelle

1353340cookie-checkWas bedeutet diese C-Anweisung?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy