Hallo, eine blöde Frage zu folgender Deklaration Code: extern void GetData(uint8 arg[1]); Wird hier ein Zeiger auf arg übergeben oder der Wert von arg?
@Erni (Gast) >extern void GetData(uint8 arg[1]); >Wird hier ein Zeiger auf arg übergeben oder der Wert von arg? Ein Zeiger, denn arg[1] ist ein Array. Man könnte auch schreiben uint8 *arg
ok Danke. Beim Aufruf uint8 u; GetData(&u); läuft der Compiler auch durch - passt alles so! Erledigt
Erni schrieb: > extern void GetData(uint8 arg[1]); Die ungewöhnliche Deklaration läßt vermuten, daß die Funktion nur am 2. Element eines Arrays interessiert ist. D.h. Dein Aufruf wird falsch sein.
Peter D. schrieb: > Die ungewöhnliche Deklaration läßt vermuten, daß die Funktion nur am 2. > Element eines Arrays interessiert ist. Ich hätte vermutet, dass sie ausdrücklich nur ein Element erwartet.
Man müßte mal probieren, ob die Zahl den Compiler überhaupt interessiert. Ich hab sowas bisher nirgends gesehen.
Es kann ja auch von jemanden stammen, der nicht wusste was er tat :-) Solange probiert, bis der Compiler ruhig war und das Ergebnis stimmte
>Solange probiert, bis der Compiler ruhig war
nein alles gut! Mach dir keine Sorgen ;)
Die Deklaration ist nur etwas unüblich.
Kann man machen. Der Compiler wird nicht meckern. Folgende drei Deklarationen sind ebenbürtig und korrekt:
1 | extern void GetData(uint8 arg[1]) |
2 | |
3 | extern void GetData(uint8 arg[]) |
4 | |
5 | extern void GetData(uint8* arg) |
Die erste Variante mit Angabe einer festen Größe ist jedoch unüblich und in gewisser Hinsicht auch für kritisch. Denn der Aufrufer der Funktion wird in den Glauben versetzt, die Funktion ist auf ein einelementiges Array beschränkt.
Kritisch ja, aber meiner Meinung in die andere Richtung. Man könnte denken, der Compiler überwacht die Arraygröße. Dem ist die Zahl in eckigen Klammern jedoch Mumpe. Wenn man schreibt : extern void GetData(uint8 arg[6]); Kann man trotzdem Arrays der Länge 3 angedreht bekommen. Mit den üblichen lustigen Folgen nach dem Schreiben auf Element 5...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.