Цитата(rezident @ Jun 22 2007, 21:26)

А разве структуры и объединения в ANSI C не к тому же перечислимому типу относятся? Сорри, если не в кассу

Структуры являются агрегатным типом, а не перечислимым. Объединения - это вообще просто мапинг объектов разных типов на одну память. А перечислимый тип (
enum) - это тип, который описывает ограниченное -
перечисленное - множество значений и объекты этого типа могут принимать только эти значения. Если объекты
перечислимого типа безпрепятственно могут принимать любые значения, то таковой тип
перечислимым по сути не является. Что и имеет место в С.
Цитата(CaPpuCcino @ Jun 23 2007, 01:26)

да, по-моему контроль типов в случае констант и дефайнов ни при чём - в случае макроса препроцессор заменит имя макроса на литерал а уже компилятор будет видеть литерал и произведёт такую же проверку и приведение (если возможно) типов. важнее как раз (как было уже сказано) область видимости. не так ли?
Контроль типов тоже причем. Например, есть две перегруженные функции:
void f(short);
void f(long);
#define SLON 10
const short Slon = 10;
...
f(SLON); // ошибка компиляции - неодноначность при выборе функции
f(Slon); // все нормально - вызывается void f(short)
Примеров, где информация о типе является значимой, достаточно. Уже не говоря о том, что константы могут быть не только объектами встроенных типов, но указателями, структурами и др, что на макросах реализуется, мягко говоря, криво.
«Отыщи всему начало, и ты многое поймёшь» К. Прутков