Booster Иногда размер имеет приоритет. Вспомните про bitfields. Да и при правильном проектировании структуры ни выравнивание, ни производительность не пострадают. Вы разве не используете в структурах 1-байтовые типы (bool, char)? Значения енума не обязаны быть непрерывным диапазоном. Большая разрядность нужна, если значения енума используются как флаги.
green Не вижу никаких проблем, перечисление станет uint64_t. Это фича узкоспецифична, для контроля значений в pod структурах.
Booster Вообще в типизированных енумах имеет значение именно размер типа, а не тип сам по себе. Согласитесь, возможность управлять бинарным размером енума полезна. Иногда нужны битовые флаги и маски большой разрядности. Как прикажете поступить?
а вообще типизация енумов имхо достаточно полезна. видел кучу исходников где для типизации используются хаки типа: Код (Text): enum SomeEnum { SomeField1, SomeField2, ... SomeFieldN, SomeFieldPadding = 0xFFFFFFFF }
Asterix, тебе правда 16 знаков double не хватает? Что за расчёты такие? Если динамический диапазон очень большой, то данные можно центрировать и нормализовать.
W4FhLF 80 bit long double юзает борланд, и меня напрягает при компиляции на MS VS ставить костыли или править хидеры где оно юзается, за примером далеко ходить не надо, в SDK OllyDbg юзается
Asterix У тебя что где-то забит его размер? Надо юзать sizeof(long double) и тогда проблем возникать недолжно.
W4FhLF не у меня, а у OllyDbg во внутренних структурах, а так как сам Olly компилился борманом, то чтобы получить данные из этой струтуры правильно(не мусор) нужно юзать 80 bit long double т.к. сам это поле структуры не юзаю, то чтоб не править хидеры самого Olly прикрутил костыли Код (Text): typedef struct LONG_DOUBLE { char buff[10]; } LONG_DOUBLE; typedef struct t_reg_ { // Excerpt from context int modified; // Some regs modified, update context int modifiedbyuser; // Among modified, some modified by user int singlestep; // Type of single step, SS_xxx ulong r[8]; // EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI ulong ip; // Instruction pointer (EIP) ulong flags; // Flags int top; // Index of top-of-stack LONG_DOUBLE f[8]; // Float registers, f[top] - top of stack char tag[8]; // Float tags (0x3 - empty register) ulong fst; // FPU status word ulong fcw; // FPU control word ulong s[6]; // Segment registers ES,CS,SS,DS,FS,GS ulong base[6]; // Segment bases ulong limit[6]; // Segment limits char big[6]; // Default size (0-16, 1-32 bit) ulong dr6; // Debug register DR6 ulong threadid; // ID of thread that owns registers ulong lasterror; // Last thread error or 0xFFFFFFFF int ssevalid; // Whether SSE registers valid int ssemodified; // Whether SSE registers modified char ssereg[8][16]; // SSE registers ulong mxcsr; // SSE control and status register int selected; // Reports selected register to plugin ulong drlin[4]; // Debug registers DR0..DR3 ulong dr7; // Debug register DR7 } t_reg_;