Forum: Compiler & IDEs Datentypen umdefinieren


von Thomas (Gast)


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 User
von Rene H. (Gast)


Lesenswert?

Was willst Du genau machen?

von Cyblord -. (cyblord)


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)


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)


Lesenswert?

Gosh, ist das so schwierig zu schreiben, was Du in was umwandeln willst?

von Oliver S. (oliverso)


Lesenswert?

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

: Bearbeitet durch User
von Thomas (Gast)


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)


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)


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).

von W.S. (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.