Datentypen umdefinieren

#4709688
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?
#4709702
Grundsätzlich macht #define nur eine reine Textersetzung im Quelltext. 
Damit lässt sich prinzipiell jedweder Unsinn anstellen, auch sowas wie
1
#define rot blau

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

Oliver
#4709853
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:
1
enum x
2
{
3
        red = 1,
4
        blue = 2,
5
        green
6

7
};
8

9
enum y
10
{
11
        laut,
12
        leise
13
};
14

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

19
        a = red;
20
        a = 97;
21
}

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).
Gast #4711205
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.