Для перепрофилирования: если все содержимое файла не окружено ifndef / define / endif, тогда FOO_H
на самом деле не файл включает в себя guard, он только защищает часть файла. Так что, возможно, он не должен быть назван в честь всего файла. Рекурсивное включение одного и того же файла - одна из ситуаций, когда это может произойти.
Тем не менее, я подозреваю, что даже в этом случае должно быть довольно очевидно, для чего предназначено определение (во всяком случае, более очевидно, что любая хитрая вещь, которую вы делаете, не просто включает охрану). Везде, где вы видите шаблон ifndef FOO / определение FOO или даже просто ifndef FOO / определение большого количества вещей, простой комментарий может сделать значение FOO очевидным, если его еще нет.
Если какая-то часть вопроса заключается в том, может ли токен FOO_H
когда-либо использоваться для какой-либо другой цели: я предполагаю, что если у вас есть файл с именем uppercase.h
, который использует UPPERCASE_H
в качестве защитного ключа, тогда это может возможно столкновение с чьим-либо rot13.h
, содержащим #define UPPERCASE_A ('N')
и т. д. Глупый пример, но если вы определяете свойства букв в заголовочном файле, то не смешно думать, что некоторые из них могут заканчиваться _H
.
Более реалистично, у меня были проекты с включаемыми файлами с одинаковым базовым именем в разных каталогах.
Так что, независимо от контекста и перепрофилирования, я бы не стал использовать FOO_H
в качестве включающего охранника.