Forum: PC-Programmierung c declarations


von Tim (Gast)


Lesenswert?

servus!

Kennt ihr die Seite https://cdecl.org/ ? Sehr unterhaltsam, aber beim 
spielen damit bin ich stutzig geworden und habe sukzessive zu 
einfacheren Ausdrücken zurück gerudert bis ich hier stehen geblieben 
bin:
1
int foo(void)[];

Was ist denn da los? onlinegdb.com motzt glücklicherweise auch...
Ist es nicht so, dass eine Funktion kein Array zurückgeben darf laut 
Regeln bei C-Deklarationen?

von Mombert H. (mh_mh)


Lesenswert?

Vielleicht solltest du angeben wo du gestartet hast und in welchen 
Schritten du gerudert bist.

von Tim (Gast)


Lesenswert?

Das ist das einfachste Konstrukt, was es meiner Meinung nach nicht geben 
darf (oder irre ich mich da einfach). Das kannst du aufblähen, aber der 
einfachste mögliche Fall ist doch die beste Referenz.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Das Tool analysiert nur die Syntax, nicht die Semantik.

von Klaus W. (mfgkw)


Lesenswert?

Tim schrieb:
> Das ist das einfachste Konstrukt, was es meiner Meinung nach nicht geben
> darf (oder irre ich mich da einfach).

Geht viel einfacher:
1
)

von W.S. (Gast)


Lesenswert?

Tim schrieb:
> Was ist denn da los?

Du solltest nicht versuchen, einen "ordre de mufti" zu hinterfragen. Das 
ist in C eben so. Basta.

Tja, C ist eine Programmiersprache, wo es eher Attribute zu Grundtypen 
als echte deklarierbare Typen gibt. Siehe byte, word, cardinal versus 
unsiged char, unsigned int, unsigned long int. Und Funktionen und Zeiger 
auf Funktionen unterscheiden sich in C von anderem Zeugs nur durch das 
nachgestellte () bzw. (...). Ob das schlußendlich eine gute Entscheidung 
war, eine Programmiersprache derart zu konzipieren, mag bezweifelt 
werden. Das ist aber jetzt kein Thema.

W.S.

von Rolf M. (rmagnus)


Lesenswert?

Tim schrieb:
> servus!
>
> Kennt ihr die Seite https://cdecl.org/ ?

Ich kenne das gleichnamige Kommandozeilentool, das von dieser Webseite 
offensichtlich verwendet wird.

> Ist es nicht so, dass eine Funktion kein Array zurückgeben darf laut
> Regeln bei C-Deklarationen?

So ist es. Wie Yalu schon sagt, zeigt das Tool aber nur, was die 
Deklaration syntaktisch bedeutet, ohne zu prüfen, ob die Sprache das 
überhaupt so erlaubt.
Da gibt's noch andere Dinge, die das Ding erklärt, obwohl es in C nicht 
erlaubt ist, z.B.
1
int foo[3](void)  - Arrays aus Funktionen gibt es in C nicht
2
int foo(void, void) - void darf nur einmal vorkommen als Zeichen, dass die Funktion keine Parameter hat.

Dafür meldet es hier einen "syntax error", weil es anscheinend nicht 
damit klar kommt, wenn Parameter einen Namen haben.
1
int foo(int x)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.