mikrocontroller.net

Forum: Compiler & IDEs Datentypen umdefinieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Thomas (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte einen Datentyp für ein C Modul umdefinieren.
Beim Makro kann ja #undef xxx benutzt werden, gibt es eine Möglichkeit 
in C ein enum umzudefinieren?

Gruß Thomas

: Verschoben durch Moderator
von Rene H. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Was willst Du genau machen?

von Cyblord -. (cyblord)


Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Hallo,
> ich möchte einen Datentyp für ein C Modul umdefinieren.
> Beim Makro kann ja #undef xxx benutzt werden, gibt es eine Möglichkeit
> in C ein enum umzudefinieren?
>
> Gruß Thomas

#undef und Konsorten sind Präprozessoranweisungen. Enum und anderen 
Datentypen sind Sprachelemente von C. Das ist schon ein Unterschied.

Warum willst du so was überhaupt tun?

von Thomas (Gast)


Bewertung
0 lesenswert
nicht lesenswert
In dem Modul wird eine neue Definition von einem enum eingebunden welche 
ich auf die bestehende SW anpassen möchte ohne groß was zu ändern.

von Rene H. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Gosh, ist das so schwierig zu schreiben, was Du in was umwandeln willst?

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Grundsätzlich macht #define nur eine reine Textersetzung im Quelltext. 
Damit lässt sich prinzipiell jedweder Unsinn anstellen, auch sowas wie
#define rot blau

Ob das sinnvoll ist, und mit welchen Nebenwirkungen zu rechnen ist, ist 
offen.

Oliver

: Bearbeitet durch User
von Thomas (Gast)


Bewertung
0 lesenswert
nicht lesenswert
dies hier

typedef enum
{
rot = 1,
gelb,
blau,
max = 15
}farben

muss zu

typedef enum
{
rot = 1,
gelb,
blau,
orange,
max = 15
}farben

werden

von Oliver S. (oliverso)


Bewertung
1 lesenswert
nicht lesenswert
Und wie oft taucht dieses typedef im Quellcode auf?

Änder es halt einfach ab, schreib einen passenden Kommentar dazu, und 
fertig. Alles andere wäre da völliger Unfug.

Oliver

von Markus F. (mfro)


Bewertung
0 lesenswert
nicht lesenswert
gerade bei enums sehe ich da keinerlei Notwendigkeit oder gar Sinn.

In C sind enums nicht typsicher - letztendlich kannst Du jeden 
beliebigen int-Wert zuweisen, dem Compiler ist das völlig wurscht:
enum x
{
        red = 1,
        blue = 2,
        green

};

enum y
{
        laut,
        leise
};

int main(int argc, char *argv[])
{
        enum y a;

        a = red;
        a = 97;
}

Ist völlig valider Code.

Also brauchst Du nichts abzuändern, definiere einfach ein zusätzliches 
enum. Oder gewöhn' dir enums gleich ganz ab, sie sind nicht zu viel 
nütze und suggerieren eine Typsicherheit, die sie nicht bieten. Der 
gezeigte Code erzeugt mit gcc -Wall keinerlei Diagnostik (clang spuckt 
immerhin eine Warnung aus).

von W.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> ich möchte einen Datentyp für ein C Modul umdefinieren.

Du kannst keine Datentypen umdefinieren. Sowas geht grundsätzlich nicht.
Wenn du es mit struct's zu tun hast, dann hilft nur das Definieren eines 
anderen struct's. Und aus einem unsigned long int wird auch niemals 
inhaltlich etwas anderes. Alles andere wäre ja auch widersinnig.

Wenn du es mit simplen Datentypen zu tun hast, also all dem, was in den 
Compiler ohnehin eingebaut ist (char, int, float und Varianten dazu wie 
long, short, unsigned, volatile usw.), dann kannst du per typedef dem 
Datentyp einen zweiten Namen geben und anschließend beide verwenden. 
Sowas treiben die Leutchen, die uint16t oder u16 oder ähnliches Geraffel 
benutzen.

Man kann das machen und damit die Unleserlichkeit befördern. Aber wenn 
es sich bloß um "enum" handelt, würde ich eben dieses enum generell und 
ein für alle  mal rauswerfen, um mich nie wieder mit sowas herumärgern 
zu müssen: int draus machen und die rot grün blau per #define zentral 
erledigen.

W.S.

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.