Что является хорошей ссылкой, документирующей шаблоны использования файлов “.h” в C?[дубликат]
-
05-07-2019 - |
Вопрос
На этот вопрос уже есть ответ здесь:
"Интерфейсы и реализации C" показывают некоторые интересные шаблоны использования структур данных, но я уверен, что существуют и другие.
Решение
Посмотрите на стандарт кодирования C Центра космических полетов имени Годдарда (НАСА) (на этом URL - АДРЕС).В нем есть несколько хороших и интересных рекомендаций.
Одно конкретное руководство, которое я принял для своего собственного кода, заключается в том, что заголовки должны быть самодостаточными.То есть вы должны уметь писать:
#include "header.h"
и код должен компилироваться правильно, с включением любых других необходимых заголовков, независимо от того, что было сделано ранее.Простой способ обеспечить это - включить заголовок в исходный код реализации - в качестве первого заголовка.Если это компилируется, заголовок является автономным.Если он не компилируется, исправьте все так, чтобы он компилировался.Конечно, это также требует от вас убедиться, что заголовки являются идемпотентными - работают одинаково независимо от того, как часто они включаются.Для этого тоже есть стандартная идиома:
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
...operational body of header.h...
#endif /* HEADER_H_INCLUDED */
Конечно, крайне важно, чтобы #define находился в верхней части файла, а не в нижней.В противном случае, если заголовок, включенный this , также включает header.h , то в итоге вы получите бесконечный цикл - это нецелесообразно.Даже если вы решите придерживаться стратегии:
#ifndef HEADER_H_INCLUDED
#include "header.h"
#endif /* HEADER_H_INCLUDED */
в коде, который включает заголовок - практика, которая является не рекомендуется - важно также включить защитные элементы в сам заголовок.
Обновление 2011-05-01
Приведенный выше URL-адрес GSFC больше не работает.Вы можете найти более подробную информацию в ответах на этот вопрос Должен ли я использовать #include в заголовках, который также содержит перекрестную ссылку на этот вопрос.
Обновление 2012-03-24
Упомянутый стандарт кодирования NASA C можно получить и загрузить через интернет-архив:
Другие советы
Вспомогательные устройства это интересный подход:используйте инструмент для создания заголовков.Составные части используются в D.R.У Хиппа cvстрак и ископаемое.
Возможно, вы захотите взглянуть на Крупномасштабный дизайн программного обеспечения на C ++ Джона Лакоса.