enum vs define
От: gbt Россия  
Дата: 18.10.05 16:26
Оценка:
Постоянно мучает вопрос, почему в C принято объявлять константы через define, а не через enum ?

Редко когда в библиотеке на C встретишь enum, но постоянно кучу defin'ов...

Ведь enum попадает в отладочную информацию, более корректно обрабатывается компилятором, легче читается...

Почему же используют define ?
Re: enum vs define
От: Константин Ленин Франция  
Дата: 18.10.05 16:35
Оценка:
потому, что значение enuma ограничивается int'ом(
Re: enum vs define
От: __LP  
Дата: 18.10.05 16:40
Оценка:
Здравствуйте, gbt, Вы писали:

gbt>Постоянно мучает вопрос, почему в C принято объявлять константы через define, а не через enum ?


gbt>Редко когда в библиотеке на C встретишь enum, но постоянно кучу defin'ов...


gbt>Ведь enum попадает в отладочную информацию, более корректно обрабатывается компилятором, легче читается...


gbt>Почему же используют define ?

Мне кажется в классическом С не было enum'ов. А в С99 есть const.
C++ можно выучить за 21 день! ...если дни — полярные.
Re[2]: enum vs define
От: _Winnie Россия C++.freerun
Дата: 18.10.05 17:23
Оценка:
Здравствуйте, __LP, Вы писали:

__L>Мне кажется в классическом С не было enum'ов. А в С99 есть const.

gcc test.c --pedantic -std=c89 компилирует всё молча.

typedef enum tag_E { a, b, c, unknown } E; 

void print(E e)
{
    switch (e)
    {
    case a: printf("a!"); break;
    case b: printf("b!"); break;
    case c: printf("c!"); break;
    case unknown: printf("???"); break;
    }
}

enum tag_E type()
{
    switch (getchar())
    {
    case 'a': return a;
    case 'b': return b;
    case 'c': return c;
    default: return unknown;
    }
}

int main()
{
    print(type());
}




gbt>>Почему же используют define ?

два предположения
1) old broken braindead C compilers
кажется, давным-давно, когда компьютеры были большими, а программы маленькими....
2) broken braindead C-programmers
программисты на С грязи не боятся!
Правильно работающая программа — просто частный случай Undefined Behavior
Re[3]: enum vs define
От: __LP  
Дата: 18.10.05 17:30
Оценка:
Здравствуйте, _Winnie, Вы писали:

_W>Здравствуйте, __LP, Вы писали:


__L>>Мне кажется в классическом С не было enum'ов. А в С99 есть const.

_W>gcc test.c --pedantic -std=c89 компилирует всё молча.

Прошелся поиском по Кернигану/Ритчи — ни одного упоминания про enum'ы.
C++ можно выучить за 21 день! ...если дни — полярные.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.