Нет «правила», есть только условные обозначения. Первое и наиболее часто используемое соглашение состоит в том, что все макросы прекомпилятора имеют прописные буквы, поэтому защита заголовков тоже должна быть заглавной.
Что касается имени макроса, то то, что я использую (и то, что используется для большей части кода, которое я видел), - это просто имя заголовка (как сказано, обращено ко всем прописным буквам), включая расширение, заменяя точку на подчеркивание, а затем _INCLUDED
.
#ifndef MYHEADER_HPP_INCLUDED
#define MYHEADER_HPP_INCLUDED
// ...
#endif
Обратите внимание, что многие Prepend такие идентификаторы с подчеркиванием или двойным подчеркиванием, но это не хорошая практика, так как стандарт определяет, что идентификаторы начинают (или содержащие) двойные подчеркивания и те, начиная с одного подчеркивания, за которым следует прописная буква зарезервирована для материалов, специфичных для компилятора/библиотеки (например, __declspec в VC++ или макросах, используемых в стандартных заголовках) во всех областях; все остальные идентификаторы, начинающиеся с одного символа подчеркивания, зарезервированы в глобальной области. Поэтому такие идентификаторы не должны использоваться, чтобы избежать столкновений.
Дополнительная информация об этом материале here.
Спасибо! Конечно! Теперь это очевидно, не знаю, почему это меня раньше не поразило. Это определено после ifndef, так что .. Ха, спасибо! – foo