Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Bedoel je zoiets alsNMe84 schreef op donderdag 18 november 2004 @ 23:15:
Typecasten naar unsigned werkt niet?
"STRANGE = 6U,",
"STRANGE = (unsigned char)6," of
"x.surface = (unsigned)CHARMING;"
werken niet
Hoe ik het nu op MSVC heb opgelost kan je hieronder zien, maar dit wil ik helemaal niet. Moet ik nou MS gaan bashen
1
2
3
4
5
| typedef unsigned char moo;
enum moo {
STRANGE = 6,
CHARMING = 7
}; |
[ Voor 32% gewijzigd door Darkvater op 18-11-2004 23:32 ]
Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge
Volgens mij frot de compiler het in de kleinste eenheid waar het nog in past.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
farlane schreef op donderdag 18 november 2004 @ 23:33:
Misschien door de default chars unsigned te maken ? (=compiler optie)
Volgens mij frot de compiler het in de kleinste eenheid waar het nog in past.
Gedaan; maar zonder resultaat./J (Default char Type Is unsigned)
Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge
"Beauty is the ultimate defence against complexity." David Gelernter
Je kan geen modifiers bij een typedef toevoegen...Soultaker schreef op donderdag 18 november 2004 @ 23:42:
Ik gebruik ze niet zo vaak, maar ik dacht dat het teken van een bitfield implementatie-afhankelijk is. (Ook als je bijvoorbeeld een "int" declareert, die normaal gesproken zijn signed zou zijn.) Probeer dus eens "unsigned moo" in je declaratie te zetten?
"Beauty is the ultimate defence against complexity." David Gelernter
Jah, het moetMacros schreef op donderdag 18 november 2004 @ 23:42:
Is het heel erg belangrijk dat je 2 'ints' in 1 byte stopt? Anders vind ik dat je het jezelf erg moeilijk maakt, maar ja, wie ben ik
Dus MS flamen maar?
Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge
Overigens snap ik niet waarom je dat veld niet gewoon unsigned definieert. Types gebruiken in bitfields is sowieso een beetje raar, omdat je het type beperkt tot een vast aantal bits. Zeg dan direct "unsigned : 3" dan geef je tenminste aan dat het een unsigned 3-bits waarde is.
[ Voor 3% gewijzigd door Soultaker op 18-11-2004 23:54 ]
"Beauty is the ultimate defence against complexity." David Gelernter
1
2
3
| #ifdef __MSVCPP var = ~var + 1; #endif |
Lelijk, doch effectief.
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
sterker nog, sizeof (oof) == sizeof (int)Macros schreef op donderdag 18 november 2004 @ 23:42:
Is het heel erg belangrijk dat je 2 'ints' in 1 byte stopt? Anders vind ik dat je het jezelf erg moeilijk maakt, maar ja, wie ben ik
(onder MSVC++ dan)
[ Voor 4% gewijzigd door .oisyn op 19-11-2004 11:08 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Ik heb die ~var+1 geprobeerd, maar de waarde is dan gewoon -7 (als charming 7 is), en er wordt -1 toegekend aan de waarde. Over wat farlane zegt, het heel idee was om de heele bits-dingen door de compiler zelf te laten doen..maar ik denk dat het dan inderdaad iets anders moet worden helaas; zoals get/set.farlane schreef op vrijdag 19 november 2004 @ 11:20:
Waarom maak je geen set/get functies die een enum accepteren en de bits setten/getten met een paar AND masks ?
Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge
[ Voor 34% gewijzigd door Soultaker op 19-11-2004 17:38 ]
Blijkbaar heeft MS het dus goed, en GCC fout? Ik heb geen C standaard hier; maar staat daarin dat een enum signed moet zijn?The bug is that gcc makes "an enum type be of type unsigned int (or maybe
unsigned char) rather than signed int as it should be according to K&R 2nd
edition section A8.4 pages 214-215."
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| #include <stdio.h> enum BOOL { f=0, t=1 }; struct A { BOOL b:1; }; A a; void foo() { a.b = t; if (a.b == t) // shall yield true { printf("Compiler ok!\n"); } else { printf("Compiler bugs!\n"); } } int main(void) { foo(); return 0; } |
MSVC output hier "Compiler bugs!".
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| 4 If the value true or false is stored into a bit-field of type bool of
any size (including a one bit bit-field), the original bool value and
the value of the bit-field shall compare equal. If the value of an
enumerator is stored into a bit-field of the same enumeration type and
the number of bits in the bit-field is large enough to hold all the
values of that enumeration type, the original enumerator value and the
value of the bit-field shall compare equal. [Example:
enum BOOL { f=0, t=1 };
struct A {
BOOL b:1;
};
A a;
void f() {
a.b = t;
if (a.b == t) // shall yield true
{ /* ... */ }
}
--end example] |
Verwijderd
(Die sizeof(struct oof) lijkt mij ook wel eens interessant om te weten.)
edit: verklaarbaar maar niet volgens de standaard dus
edit2: Verdorie, ik mis posts? Don't mind me, my browsercache is borked.
[ Voor 18% gewijzigd door Verwijderd op 19-11-2004 18:09 ]
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
Weet jij of 9.6.4 veranderd sinds de 1997 working paper? Volgens mij is dat namelijk een onbekende VC compiler 'bug' die ik net postte?MSalters schreef op zaterdag 20 november 2004 @ 00:35:
7.1.5.2 zegt implementation-defined
If the value true or false is stored into a bit-field of type bool of any size (including a one bit bit-field), the original bool value and the value of the bit-field shall compare equal. If the value of an enumerator is stored into a bit-field of the same enumeration type and the number of bits in the bit-field is large enough to hold all the values of that enumeration type, the original enumerator value and the value of the bit-field shall compare equal. [Example:C++:
1 2 3 4 5 6 7 8 9 10 enum BOOL { f=0, t=1 }; struct A { BOOL b:1; }; A a; void f() { a.b = t; if (a.b == t) // shall yield true { /* ... */ } }
—end example]
Nee, de nieuwe standaard is niet color coded
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge