[an error occurred while processing this directive]
|
Примерно так.
typedef enum {e0,e1,e2} e;
short s=0x8001;
...
if ( (s&0x7FFF)==e1 ) не выполняется, потому что в регистр загружается FFFF8001, затем инструкцией CLR чистится только бит 15, после чего FFFF0001 сравнивается с 1 и не совпадает.
if ( (e)(s&0x7FFF)==e1 ) транслируется точно также.
работает только if ( (short)(s&0x7FFF)==e1 ). Тут да кого-то наконец доходит, что старшие эфы надо потереть.
Компилирую под C64, оптимизация выключена. Как раз вчера выловил.
E-mail: info@telesys.ru