mikrocontroller.net

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


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
typedef struct {
  unsigned char a;
  unsigned char b;
  unsigned char c;
} _stTest;

void func(_stTest stTest) {
...
}

//Variablendefinition
_stTest stABC;

// Aufruf
func(stABC);  //So gehts
func({1,2,3});//So nicht -> Wie dann?

Danke

Ralf

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht nicht.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Ing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so ne frage findet man selte

func(1,2,3)

func(int i,int a,int b)

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> Doch, in C99 geht es:
> 
http://gcc.gnu.org/onlinedocs/gcc-4.4.1/gcc/Compou...

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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.
typedef struct { int a,b,c; } S;

extern void f(S p);

void g(int x, int y, int z)
{
  f((S){1,2,3});
  f((S){x,y,z});
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.