mikrocontroller.net

Forum: PC-Programmierung union in c


Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi ich habe eine Problem mit unions in c.
solange ich nur eine Union nutzte klappt es und es wird umgerechnet.
Da ich jedoch nicht nur einen Wert umrechnen will brauch ich mehr als
eine Union.
Union 1:
union {float value; unsigned char byte[4];} Wert1;
dannach weise ich  Wert1.byte[x]jeweils einen Wert zu und bekomme nun
einen floatwert.
so weit so gut. sobald ich einen 2 union nutzte:
union {float value; unsigned char byte[4];} Wert2;
und dann eben auch Wert2.byte[x] die Werte zuweise bekomme ich
Fehlermeldungen
"data definition has no type or starage class"
kann ich nur eine Union zur Zeit nutzen?
Wie kann ich das Problem umgehen?

Gruß
Tim

Autor: Christoph __ (chris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Minimalbeispiel, bei dem der Fehler auftritt, könnte evtl. nicht
schaden. Am wichtigsten ist häufig genau die Zeile, auf die die
Fehlermeldung zeigt; eine Handvoll Zeilen drumherum wären auch nicht
verkehrt.

Autor: Tim (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die 2. union ist auskommentiert und so klappt das compilieren.
sobald ich die wieder rein nehme geht es nicht mehr.

Es handelt sich dabei um ein Cgi-File das mir Messwerte ausgibt die in
Hex später aus einer Datei eingelesen werden und dann auch in FLoat mit
der union umgerechnet werden sollen.

gruß
Tim

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gib halt der union selbst einfach einen Datentypnamen.
Es gibt sowieso keinen Grund warum du 2 mal denselben
Datentyp definierst:

#include <stdio.h>
#include <stdlib.h>

union FloatConverter
{
  float value;
  unsigned char byte[ sizeof float ];
};

int main (void)
{
  unsigned char Wert1[10] ;
  unsigned char Wert2[10] ;

  union FloatConverter dr;
  union FloatConverter st;

  dr.byte[0]=Wert1[4];
  dr.byte[1]=Wert1[3];
  dr.byte[2]=Wert1[2];
  dr.byte[3]=Wert1[1];

  st.byte[0]=Wert2[3];
  st.byte[1]=Wert2[2];
  st.byte[2]=Wert2[1];
  st.byte[3]=Wert2[0];

  ...

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.