Datentypen umdefinieren

#4709688
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?
#4709853
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:
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
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren