Можете ли вы порекомендовать мне, что мне следует читать / учиться, чтобы сделать хорошо организованный код на C?
Одна из вещей, которые я хочу изучить, – это принципы разделения проекта в файлах .h и .c, что происходит где и почему, имена переменных, когда использовать глобальные переменные …
Меня интересуют книги и статьи , посвященные этой конкретной проблеме.
Хорошая книга, которая охватывает многие из них (для C и C ++) – это крупномасштабная разработка программного обеспечения на C ++, Джон Лакос :
Кроме того, хорошим правилом для запоминания является «Никогда не делать ничего, что выделяет память в файле заголовка»,
Что касается макета файлов, не так много альтернатив.
Разделение обычно является одним из следующих (пакет здесь представляет собой одну библиотеку или двоичный файл):
Разделение (1) удобно в том, что все файлы, принадлежащие определенному пакету, хранятся в одном каталоге, поэтому пакет можно легко перемещать, но при таком подходе отключение заголовков API от частных и обнаружение изменений API не является тривиальным. (2) и (3) очень похожи, они делают триггеры API и API изменений тривиальными, тогда как (2) немного легче для случая, когда вы всегда выпускаете весь проект, и (3) немного лучше, когда вы выпускаете отдельные пакеты (например, для исправления)
В любом проекте C / C ++ обычно существуют следующие общие пакеты:
Конкретно для unix (а не для c
, natch), но тем не менее:
Рекурсивный считается вредным
С описанной структурой сборки вы можете позволить себе использовать много файлов. Поэтому каждый логический блок получает заголовок и исходный файл.
Я думаю, что лучшее образовательное чтение, которое вы собираетесь рассказать на эту тему, читает что-то вроде источника ядра Linux. У этого есть хороший исходный макет, и это в основном стандартный большой проект C. Вот руководство по тому, как исходные файлы должны быть объединены для источника BSD.
Серьезно, просто начните читать источник ядра и почувствуйте, как все складывается. Очевидно, это очень хорошо спланированный проект.