Что является хорошей ссылкой, документирующей шаблоны использования файлов “.h” в C?[дубликат]

StackOverflow https://stackoverflow.com/questions/256277

  •  05-07-2019
  •  | 
  •  

Вопрос

На этот вопрос уже есть ответ здесь:

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

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

Это было полезно?

Решение

Посмотрите на стандарт кодирования 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 можно получить и загрузить через интернет-архив:

http://web.archive.org/web/20090412090730/http://software.gsfc.nasa.gov/assetsbytype.cfm ?Набор типов=стандартный

Другие советы

Вспомогательные устройства это интересный подход:используйте инструмент для создания заголовков.Составные части используются в D.R.У Хиппа cvстрак и ископаемое.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top