sizeof(enum) - это баг?
От: vopl Россия  
Дата: 09.11.07 12:10
Оценка:
#include "stdafx.h"

enum E
{
    e  = 0x100000000LL,
};

int main()
{
    printf("%d\n", sizeof(E));
    return 0;
}


MSVC 7 выводит 4
Re: sizeof(enum) - это баг?
От: dip_2000 Россия  
Дата: 09.11.07 12:26
Оценка: :))
Здравствуйте, vopl, Вы писали:

V>MSVC 7 выводит 4

выравнивание. копать в сторону #pragma pack(push, 1) (MS Specific)
Re: AFAIK это документированная особенность реализации
От: Erop Россия  
Дата: 09.11.07 12:27
Оценка:
Здравствуйте, vopl, Вы писали:

V>MSVC 7 выводит 4

Это багофича M$ -- всегда использовать int для хранения перечислений.

Её, кстати, кажется можно отключить, например включив строгое соответсвие стандарту...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: sizeof(enum) - это баг?
От: kapnuu Россия  
Дата: 09.11.07 12:32
Оценка: +1 :)
Здравствуйте, vopl, Вы писали:

V>
V>#include "stdafx.h"

V>enum E
V>{
V>    e  = 0x100000000LL,
V>};

V>int main()
V>{
V>    printf("%d\n", sizeof(E));
V>    return 0;
V>}

V>


V>MSVC 7 выводит 4


естессно, sizeof(enum) не может быть больше sizeof(int). у Вас и e == 0 (разве компилятор не предупредил?) попробуйте так:

enum E: long long
{
    e  = 0x100000000LL,
};
Re[2]: AFAIK это документированная особенность реализации
От: Lorenzo_LAMAS  
Дата: 09.11.07 12:56
Оценка: :))
E>Её, кстати, кажется можно отключить, например включив строгое соответсвие стандарту...
Да, и тут же MSVC перестанет глюкать вообще, а заодно начнет поддерживать экспорт шаблонов
Of course, the code must be complete enough to compile and link.
Re[3]: AFAIK это документированная особенность реализации
От: Erop Россия  
Дата: 09.11.07 13:28
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

E>>Её, кстати, кажется можно отключить, например включив строгое соответсвие стандарту...

L_L>Да, и тут же MSVC перестанет глюкать вообще, а заодно начнет поддерживать экспорт шаблонов
При чём тут "глюкать"? Храниенией пречеслений в int -- это такое нестандартное расширение от M$. Работает очень стабильно, АФАИК...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: AFAIK это документированная особенность реализации
От: Lorenzo_LAMAS  
Дата: 09.11.07 14:03
Оценка:
E>При чём тут "глюкать"? Храниенией пречеслений в int -- это такое нестандартное расширение от M$. Работает очень стабильно, АФАИК...

Глюкать от

Е>Это багофича M$


Кстати, некорректный литерал 0x100000000LL это уже не относится к списку багофич?
Of course, the code must be complete enough to compile and link.
Re[5]: AFAIK это документированная особенность реализации
От: Erop Россия  
Дата: 09.11.07 15:31
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Кстати, некорректный литерал 0x100000000LL это уже не относится к списку багофич?

Про это не интересовался. Очень может быть, что это у них таки задокументированно
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: AFAIK это документированная особенность реализации
От: vopl Россия  
Дата: 09.11.07 16:07
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Кстати, некорректный литерал 0x100000000LL это уже не относится к списку багофич?


А чем литерал 0x100000000LL некорректный?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.