Forum: Mikrocontroller und Digitale Elektronik Funktionsaufruf


von Erni (Gast)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

@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

von Erni (Gast)


Lesenswert?

ok Danke.

Beim Aufruf

uint8 u;
GetData(&u);

läuft der Compiler auch durch - passt alles so!

Erledigt

von Peter D. (peda)


Lesenswert?

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.

von M. K. (kichi)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

Man müßte mal probieren, ob die Zahl den Compiler überhaupt 
interessiert.
Ich hab sowas bisher nirgends gesehen.

von Dirk B. (dirkb2)


Lesenswert?

Es kann ja auch von jemanden stammen, der nicht wusste was er tat :-)
Solange probiert, bis der Compiler ruhig war und das Ergebnis stimmte

von Erni (Gast)


Lesenswert?

>Solange probiert, bis der Compiler ruhig war
nein alles gut! Mach dir keine Sorgen ;)
Die Deklaration ist nur etwas unüblich.

von Sebastian K. (sek)


Lesenswert?

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.

von fop (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.