dmitry-st писал(а):
Абсолютно полный "вход" и "выход" для живой системы никогда не расписывают в принципе, но закладывают необходимую гибкость и возможности роста.
Это обычная ошибка. Точнее две. Описывают всегда - просто, возможно, другими языковыми средствами. И "необходимая гибкость" и "возможность роста" - это опять про маркетоидов.
dmitry-st писал(а):
Я уже понял Ваш подход к работе с данными в Си, он называется "прибить данные к коду гвоздями намертво" - для очень больших проектов типа нашего это означает мёртвый кусок кода, который все обходят стороной и не дай Бог там какая-то структура изменится.
Опять ерунду пишете.
Давайте посмотрим на Вашу задачу.
1. Вы хотите, чтобы имея на входе описания своих хотелок относительно некоторых объектов данных, на выходе иметь [код библиотеки] с полным(sic!) набором безопасных операций над этим объектом. Более подробно задачу Вы не видите - "гибкость", "крупные проекты", "данные раздельно друг от друга" и прочая обычная лабуда, свидетельствующая о нежелании думать.
2. Конечно, у программиста должна бы сразу возникнуть мысль "за нафига использовать такой формат данных, поддержка которого становится отдельным геморроем?". Но, допустим, мы, действительно, взяли за цель написать базу данных, а читать учебник нам лень... Хоор в гробу переворачивается...
3. Попробуем немного формализовать. На входе - набор фактов: "X - структура", "Y - поле X", "Y целое", "Y in [1,10]"... На выходе - .h (состоящий из перевода части фактов в C-структуры, а части в комментарии) и .c (состоящий из набора функций, волшебным образом связанных с нашим набором фактов). Совершенно непонятно, почему автору задачи не пришло в голову записать все необходимые факты в .h файл...
4. Как нам получить "волшебство" в .c-файле? Очевидно, одним-единственным образом - заранее создав набор шаблонов, в которые нужно вбивать имена структур и полей. Первая же попытка чтения хотелок автора задачи дает нам необходимость многоэтажных шаблонов: внутрь типового шаблона "присвоить значение поля" (с его очевидными вставками "имен", "типов" и чайниковски-обязательной "проверки существования") надо вставить шаблон "проверка допустимости значения", выбранный в зависимости от "типа". Если бы мы были программистами, мы бы, конечно, заметили, что вычисляемые на этом этапе данные вполне заменяют те, что мы хотим использовать в окончательном выводе (и надо возвращаться к п.2), но мы же договорились, что тупы и все непонятное считаем "прибиванием данных гвоздями".
5. Ах, да. Еще надо добавить "макросов, констант и т.п.". А еще... Блин, а вы не заметили, что мы уже получили обычный C++ template? Что для удобства подобного быдлокодинга и был изобретен этот самый С++ в своем современном виде?
6. Итак, мы имеем набор шаблонов, над которым надо выполнять две операции: заполнять данными и радоваться; вносить исправления для "гибкости, роста и макросов". На чем это писать? Очевидно, awk (perl)... (Был бы злым, написал trac). Но... Еще очевиднее, что и шаблоны, и входные данные можно порубить квадратно гнездовым методом и всю программу "преобразования" записать (на C) в виде одного несчастного цикла вокруг printf () с выборкой из таблиц "фактов".
7. Примеров приводить не буду, все равно, до этого места никто не дочитает...
Итак, что делать?
1. Учить матчасть. Если данные обладают избыточностью, позволяющей изобрести для них общие операции, их надо нормализовать.
2. Научиться работать с макросами.
3. Научиться преобразовывать текстовые файлы без создания "деревьев в памяти".
4. Научиться использовать 'nix - инструментарий.
5. Плюнуть на все на это и уйти в маркетоиды, если осталась вера в то, что слова "как-то так" в ТЗ означают "гибкость и рост", а не немедленное увольнение.