Какова хорошая ссылочная документация о шаблонах использования файлов ".h" в C?

"Интерфейсы и реализации C" показывают некоторые интересные шаблоны использования для структур данных, но я уверен, что есть и другие.

http://www.amazon.com/Interfaces-Implementations-Techniques-Addison-Wesley-Professional/dp/0201498413

Ответ 1

Посмотрите на стандарт кодирования космического полета Годдарда (NASA) C (на этом URL). В нем есть несколько хороших и интересных рекомендаций.

Один конкретный ориентир, который я принял для моего собственного кода, состоит в том, что заголовки должны быть автономными. То есть вы должны иметь возможность написать:

#include "header.h"

и код должен правильно компилироваться, включая любые другие необходимые заголовки, независимо от того, что было раньше. Простым способом обеспечения этого является включение заголовка в источник реализации - в качестве первого заголовка. Если это компилируется, заголовок является самодостаточным. Если он не компилируется, исправьте так, чтобы он это делал. Конечно, это также требует, чтобы заголовки были идемпотентными - работайте одинаково независимо от того, как часто они включаются. Для этого есть стандартная идиома:

#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
...operational body of header.h...
#endif /* HEADER_H_INCLUDED */

Обязательно, конечно, иметь #define в верхней части файла, а не внизу. В противном случае, если заголовок, включенный в него, также включает header.h, вы получите бесконечный цикл - не здоровый. Даже если вы решите пойти со стратегией:

#ifndef HEADER_H_INCLUDED
#include "header.h"
#endif /* HEADER_H_INCLUDED */

в коде, который включает заголовок - рекомендуется использовать не - важно включить защитные устройства в сам заголовок.


Обновление 2011-05-01

URL-адрес GSFC больше не работает. Вы можете найти дополнительную информацию в ответах на вопрос Должен ли я использовать #include в заголовках, который также содержит перекрестную ссылку на этот вопрос.

Обновление 2012-03-24

Ссылаемый стандарт кодирования NASA C можно получить и загрузить через интернет-архив:

http://web.archive.org/web/20090412090730/http://software.gsfc.nasa.gov/assetsbytype.cfm?TypeAsset=Standard

Ответ 2

Makeheaders - интересный подход: используйте инструмент для создания заголовков. Makeheaders используется в DR Hipp cvstrac и fossil.

Ответ 3

Возможно, вы захотите взглянуть на крупномасштабную разработку программного обеспечения на С++ Джона Лакоса.