лучшие статьи об организации файлов кода в C

Можете ли вы порекомендовать мне, что мне следует читать / учиться, чтобы сделать хорошо организованный код на C?

Одна из вещей, которые я хочу изучить, – это принципы разделения проекта в файлах .h и .c, что происходит где и почему, имена переменных, когда использовать глобальные переменные …

Меня интересуют книги и статьи , посвященные этой конкретной проблеме.

    Хорошая книга, которая охватывает многие из них (для C и C ++) – это крупномасштабная разработка программного обеспечения на C ++, Джон Лакос :

    Кроме того, хорошим правилом для запоминания является «Никогда не делать ничего, что выделяет память в файле заголовка»,

    Что касается макета файлов, не так много альтернатив.

    Разделение обычно является одним из следующих (пакет здесь представляет собой одну библиотеку или двоичный файл):

    1. … / проект /…/ пакет / модуль. {C, H}
    2. … / project /…/ {src, include} / package / module. {c, h} // заголовки не-интерфейса идут в src
    3. … / project /…/ package / {src, include} / module. {c, h} // заголовки не-интерфейса идут в src

    Разделение (1) удобно в том, что все файлы, принадлежащие определенному пакету, хранятся в одном каталоге, поэтому пакет можно легко перемещать, но при таком подходе отключение заголовков API от частных и обнаружение изменений API не является тривиальным. (2) и (3) очень похожи, они делают триггеры API и API изменений тривиальными, тогда как (2) немного легче для случая, когда вы всегда выпускаете весь проект, и (3) немного лучше, когда вы выпускаете отдельные пакеты (например, для исправления)

    В любом проекте C / C ++ обычно существуют следующие общие пакеты:

    1. Общие macros и типы данных
    2. Пакет регистрации
    3. Пакет загрузочного приложения (в случае, если в проекте имеется более 1 бинарных файлов).

    Конкретно для unix (а не для c , natch), но тем не менее:

    Рекурсивный считается вредным

    С описанной структурой сборки вы можете позволить себе использовать много файлов. Поэтому каждый логический блок получает заголовок и исходный файл.

    Я думаю, что лучшее образовательное чтение, которое вы собираетесь рассказать на эту тему, читает что-то вроде источника ядра Linux. У этого есть хороший исходный макет, и это в основном стандартный большой проект C. Вот руководство по тому, как исходные файлы должны быть объединены для источника BSD.

    Серьезно, просто начните читать источник ядра и почувствуйте, как все складывается. Очевидно, это очень хорошо спланированный проект.