C99 - почему false и true определены как 0 и 1, а не как ((bool) 0) и (( bool) 1)?

Просто наткнулся на утверждение, которое не удалось, поскольку оно сравнивало false с типом возврата функции, поскольку сама функция вернула логическое значение, а утверждение проверило не только значение, но и тип возвращаемого значения на соответствие один из false, чтобы гарантировать, что возвращается логическое значение. Теперь проблема в том, что C99 определяет bool как _Bool, а _Bool даже не обязательно имеет тот же размер, что и int (на самом деле, по моему опыту, на большинстве платформ в настоящее время он часто имеет такой же размер, как unsigned char),не говоря уже о том, что это один и тот же тип (что на самом деле невозможно, поскольку _Bool является встроенным типом языка в C99), но определяет false и true как 0 и 1 без какого-либо преобразования типов, а определения препроцессора без преобразования типов по умолчанию будут иметь int. Если бы C99 вместо этого определил false и true как ((bool) 0) и ((bool) 1), они всегда были бы типа bool, независимо от того, как определяется _Bool. Так есть ли веская причина, чтобы они всегда определялись как int, даже если bool не является int на этой платформе или это просто ошибка языка, которую следует исправить с помощью C1x?

5
задан Kaiserludi 8 July 2011 в 17:49
поделиться