ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
207283 Топик полностью
testerplus (23.08.2010 14:02, просмотров: 141) ответил fk0 на На счёт возможных ошибок -- надумано. warning или error дают все компиляторы. Зато нарушается принцип "не плодить сущностей сверх необходимого", что ведёт к бардаку, говнокоду и ошибкам. И программисту не видно в *.c переменной -- размазывается код по
Про возможные ошибки - да, тут спасут сообщения. Да и разбрасывание определений по .c и .h на мой взгляд тоже неудобно. А ентеров и пробелов - где-то перегиб, но в целом правильное предписание. К тому же это их внутренний циркуляр. А насчет стандартов и переопределения типов: неужели не сталкивались при переносе кода с этой проблемой. Стандартом (в частности C99) не предусмотрена размерность и знаковость целых типов (обращу внимание, что в 5.2.4.2.1 всего лишь дается шаблон содержимого файла с помектой "замените константы на нужные). Кроме того, программисты - прораммистами, а создатели компиляторов иногда руководствуются своей логикой. В CCS, например, short int - это 1-битный тип, int - 8-битный, long - 16-битный. В хайтеке char - по умолчанию беззнаковый, а в MСС18 - знаковый. И т.д. Так что переопределение целых типов - это первый шаг при написании программы, должен делаться даже до описания обработчиков трапов. А насчет конструкции BLABLABLA все правильно у них описано. Как раз рекурсия исключается, если define стоит в начале: file1.h: #ifndef FILE1 #define FILE1 #include "file2.h" ... #endif file2.h: #ifndef FILE2 #define FILE2 #include "file1.h" ... #endif А при определении в конце как раз получим рекурсию.