Как и в случае с другими вопросами стиля C, просто будьте последовательными . Вы не сможете узнать пространство имен каждой библиотеки, которую кто-то может связать с вашей программой в будущем. Зачем? Многие из них еще не написаны:)
Таким образом, вопрос не в том, чтобы включить охрану, а в том, как назвать заголовок.
Я мог бы придумать несколько крутых новых утилит для работы со строками и назвать структуру заголовка. Это плохая идея, потому что (конечно) кто-то еще придумал классные новые строковые утилиты и назвал заголовок таким же.
Итак, я называю мой post_strutils.h и:
#ifndef POST_STRUTILS_H
#define POST_STRUTILS_H
/* code */
#endif
Я могу даже назвать это post_str_utils.h
и правильно определить охрану включения, потому что я знаю, что у меня очень распространенная фамилия. Найти пространство имен иногда сложно. Простое использование одного не дает гарантии, что кто-то еще выполнил поиск до того, как выпустить что-то на волю. Будьте как можно более уникальными.
В зависимости от того, где кто-то говорит своему компилятору искать заголовки, в игру вступают не только конфликты пространства имен, но и имена файлов. Сделайте все возможное, чтобы уникально назвать заголовок , а затем напишите включающий охранник, чтобы соответствовать ему. Кто-то может захотеть #error
, если заголовок был включен несколько раз, хотя бы для того, чтобы вырезать ненужные директивы #include
, используя UUID, что делает это непонятным, поскольку он не совпадает (или даже напоминает) ) имя файла заголовка, о котором идет речь. Это также затрудняет написание grep/awk
(или аналогичных) скриптов с поддержкой lint.
Я не говорю, что вы должны называть каждую библиотеку / модуль именем себя, но позаботьтесь о том, чтобы имена публичных заголовочных файлов были уникальными. Быстрая конференция с поисковой системой скажет вам, если вы попали в неиспользуемое пространство имен. Пожалуйста, позвольте включенным охранникам соответствовать (или, по крайней мере, близко походить) на заголовок. Опять же, последовательность высоко оценивается. Из вашего примера я бы ожидал:
int blahfoo_init(void);
double blahfoo_getval(blahfoo_t *blah);
Если вы не можете найти уникальное пространство имен, обязательно используйте его:)