#include формат защиты заголовка? - PullRequest
20 голосов
/ 24 ноября 2008

Я знаю, что это не имеет большого значения для проекта, но, если вы используете #defined guard для вашего кода C ++, какой формат вы используете? например предполагая заголовок с именем foo.hpp:

#ifndef __FOO_HPP__
...

#ifndef INCLUDED_FOO_HPP
...

#ifndef SOME_OTHER_FORMAT

Я продан по идее заглавных букв #defines, но не могу выбрать формат для этих охранников.

Ответы [ 13 ]

0 голосов
/ 30 июня 2014

Я бы выбрал путь к файлу + суффикс буста _INCLUDED плюс широко поддерживаемую в настоящее время #pragma once

В большинстве редакторов (для меня это возвышенно) вы также можете определить некоторые макросы / фрагменты для этого.

Вот тот, который делает это для вас:

<snippet>
    <content><![CDATA[
#ifndef ${1:${TM_FILEPATH/(.*\/(include|src))*([^a-zA-Z0-9_]+)*([a-zA-Z0-9_]+)([.])*([a-zA-Z0-9_]+)*/\U$4_$6/ig}_INCLUDED}
#define $1
#pragma once


$0


#endif // $1
]]></content>
    <tabTrigger>incguard</tabTrigger>
    <description>include guard</description>
</snippet>

так yourproject/include/yourlib/yourfile.hpp

становится YOURLIB_YOURFILE_HPP_INCLUDED

Дополнительный внешний инструмент проверки стиля исходного кода может легко отслеживать согласованность ваших охранников таким образом.

0 голосов
/ 15 декабря 2011

Я использую

<FILENAME_IN_ALL_CAPS>_<YYYYMMDD>

или

<FILENAME_IN_ALL_CAPS>_INCLUDED_<YYYYMMDD>

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

<FILENAME_IN_ALL_CAPS>_<YYYYMMDD>a
<FILENAME_IN_ALL_CAPS>_<YYYYMMDD>b
<FILENAME_IN_ALL_CAPS>_<YYYYMMDD>...
0 голосов
/ 24 ноября 2008

Я склонен использовать:

#ifndef FILE_DATE_H_

(замените _H_ соответствующим расширением, таким как _HPP_ и т. Д.). Отметка даты предназначена для того, чтобы избежать коллизий с заголовками других имен в других направлениях / библиотеках.

так в итоге это выглядит так:

#ifndef SOMEFILE_20082411_H_
...