Ich habe ein kleines Problem. Ich habe Code, bei dem ich eine Kombination von Werten angeben muß. Soweit kein Problem, läßt sich mit Zweierpotenzen und Addition wunderbar erledigen.
Damit das Ganze übersichtlicher aussieht habe ich mich entschlossen, enums zu verwenden.
Ein paar Deklarationen aus meinem Code:
Code:
enum { S_None = 0, S_Barrel = 1, S_Top = 2, S_Under = 4, S_Grip = 8, S_Stock = 16 }; //Spaces
int enmSpaces;
Etwas weiter im Code setze ich dann einen Wert und gebe ihn aus:
Code:
enmSpaces = S_Barrel|S_Top|S_Grip;

char * acharTempChar;
acharTempChar = (char*) malloc(256);
if(acharTempChar!=NULL)
{
 sprintf(acharTempChar, "%i", enmSpaces);
 outG_Debug->value(acharTempChar);

 free(acharTempChar);
}
Ich sollte 1|2|8 = 11 zurückbekommen.
Was ich zurückbekomme ist irgendein zehnstelliger Wert, der mit nichts irgendwas zu tun hat.
Interessanterweise bekomme ich, wenn ich mehrere Variablen gleich definiere, unterschiedliche Werte zurück. Das riecht für mich stark nach uninitialisiertem Speicher, allerdings ändert sich nichts am Ergebnis, wenn ich enmSpaces malloc()e.

Ich weiß mit 100%iger Sicherheit, daß es an dem Code ab char * nicht liegen kann. Das ist normaler Standardcode, wie ich ihn bei FLTK in bestimmten Situationen brauche und ich bekomme bei anderen Werten eine korrekte Ausgabe.

Hat irgendwer eine Ahnung, warum meine Enums Amok laufen? Sollte ich den ganzen Ramsch einfach als einzelne const-Variablen definieren?

Oh, noch was... Ich habe gerade gemerkt, daß der Fehler bei ALLEN enumerierten Werten auftritt, nicht nur bei denen, die ich mit | verbinde.