Forum: PC-Programmierung C: Funktionsparameter ist ein struct, wie Werte direkt übergeben?


von Ralf (Gast)


Lesenswert?

Hi,

ich frag mich grad, ob es möglich ist, einer C-Funktion, welche als 
Parameter ein struct erwartet, die Werte direkt zu übergeben, anstatt 
eine Struktur zu übergeben.

Beispiel:
1
typedef struct {
2
  unsigned char a;
3
  unsigned char b;
4
  unsigned char c;
5
} _stTest;
6
7
void func(_stTest stTest) {
8
...
9
}
10
11
//Variablendefinition
12
_stTest stABC;
13
14
// Aufruf
15
func(stABC);  //So gehts
16
func({1,2,3});//So nicht -> Wie dann?

Danke

Ralf

von Uhu U. (uhu)


Lesenswert?

Das geht nicht.

von (prx) A. K. (prx)


Lesenswert?


von Ing (Gast)


Lesenswert?

so ne frage findet man selte

func(1,2,3)

func(int i,int a,int b)

von Reinhard Kern (Gast)


Lesenswert?

A. K. schrieb:
> Doch, in C99 geht es:
> 
http://gcc.gnu.org/onlinedocs/gcc-4.4.1/gcc/Compound-Literals.html#Compound-Literals

is nich wahr - das geht nur, wenn die Werte konstant sind, aber so war 
zwar das Beispiel, nicht aber die Frage formuliert.

Konstante Werte können eine Struktur-Konstante definieren, aber das ist 
ja nun nichts besonderes. Dagegen dürfte

func(int i,int a,int b)

wie bei Gast eben nicht gehen.

Nicht dass das ein Compiler theoretisch nicht könnte, er tut es halt 
nicht.

Gruss Reinhard

von (prx) A. K. (prx)


Lesenswert?

Reinhard Kern schrieb:

> is nich wahr - das geht nur, wenn die Werte konstant sind, aber so war
> zwar das Beispiel, nicht aber die Frage formuliert.

Wie schon das Beispiel in der verlinkten Doku zeigt geht das auch mit 
Werten, die nicht konstant sind. Ich weiss aber grad nicht ob das eine 
Spezialität von GCC ist, oder ebenfalls C99.
1
typedef struct { int a,b,c; } S;
2
3
extern void f(S p);
4
5
void g(int x, int y, int z)
6
{
7
  f((S){1,2,3});
8
  f((S){x,y,z});
9
}

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.