Подтвердить что ты не робот

Зачем ставить случайное число в первой строке в файле заголовка?

Я видел это бесчисленное множество раз. Вместо

#ifndef _common_h_
#define _common_h_

#endif /* _common_h_ */

люди иногда определяют свои заголовочные файлы в следующем формате:

#ifndef _common_h__479124197491641974591
#define _common_h__479124197491641974591

#endif /* _common_h__479124197491641974591 */

Для чего это случайное число? Я просто не смог успешно ответить на любой ответ на этот вопрос.

4b9b3361

Ответ 1

Идея состоит в том, чтобы сделать ее более сложной, чтобы отключить включить охрану непреднамеренно и/или избежать того, чтобы включить кого-либо из elses 'include guard.

Например, если вы пишете библиотеку, и у вас есть заголовок Common.h, то использование _common_h_ для защитника может помешать пользователям вашей библиотеки иметь _common_h_ стражи в своих собственных библиотеках, что не идеально. Добавление случайного числа делает такие столкновения практически невозможными.

Ответ 2

Проблема

Включение охранников часто объявляется в форме:

#ifndef X
#define X
    ...
#endif

Программист свободен в выборе, что мы будем называть здесь как "имя". Это имя часто уникально в пределах одной библиотеки, но может случиться (даже если редко), что две библиотеки определяют одно и то же имя. Это может привести к ужасным головным болям.

Случайные числа

Поскольку имя часто не важно вне определенного файла, мы можем выбрать (или другие инструменты для этого сделать для нас), чтобы включить случайное число внутри имени, что значительно затруднит возникновение конфликтов имен.

#pragma once

Вы можете избежать проблемы по-другому, используя:

#pragma once

Это хорошо поддерживаемое расширение, которое совместимо с clang, gcc и mvc, а также многие другие компиляторы.