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
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?
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.
Gosh, ist das so schwierig zu schreiben, was Du in was umwandeln willst?
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
dies hier typedef enum { rot = 1, gelb, blau, max = 15 }farben muss zu typedef enum { rot = 1, gelb, blau, orange, max = 15 }farben werden
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
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.