Зачем ставить случайное число в первой строке в файле заголовка?
Я видел это бесчисленное множество раз. Вместо
#ifndef _common_h_
#define _common_h_
#endif /* _common_h_ */
люди иногда определяют свои заголовочные файлы в следующем формате:
#ifndef _common_h__479124197491641974591
#define _common_h__479124197491641974591
#endif /* _common_h__479124197491641974591 */
Для чего это случайное число? Я просто не смог успешно ответить на любой ответ на этот вопрос.
Ответы
Ответ 1
Идея состоит в том, чтобы сделать ее более сложной, чтобы отключить включить охрану непреднамеренно и/или избежать того, чтобы включить кого-либо из elses 'include guard.
Например, если вы пишете библиотеку, и у вас есть заголовок Common.h
, то использование _common_h_
для защитника может помешать пользователям вашей библиотеки иметь _common_h_
стражи в своих собственных библиотеках, что не идеально. Добавление случайного числа делает такие столкновения практически невозможными.
Ответ 2
Проблема
Включение охранников часто объявляется в форме:
#ifndef X
#define X
...
#endif
Программист свободен в выборе, что мы будем называть здесь как "имя". Это имя часто уникально в пределах одной библиотеки, но может случиться (даже если редко), что две библиотеки определяют одно и то же имя. Это может привести к ужасным головным болям.
Случайные числа
Поскольку имя часто не важно вне определенного файла, мы можем выбрать (или другие инструменты для этого сделать для нас), чтобы включить случайное число внутри имени, что значительно затруднит возникновение конфликтов имен.
#pragma once
Вы можете избежать проблемы по-другому, используя:
#pragma once
Это хорошо поддерживаемое расширение, которое совместимо с clang, gcc и mvc, а также многие другие компиляторы.