Один раз переопределить #pragma стандартным #ifndef MS-VC++

Я не видел ответов на этот вопрос (что, вероятно, означает, что это не разрешено), но я все равно решил спросить.

Есть ли способ переопределить автоматическое создание #pragma once в файлах .h или .hpp, созданных с помощью MS Visual-C++, чтобы использовать стандартные средства защиты заголовков с использованием переносимых дружественных директив препроцессора?

#ifndef _V_DESCRIPTOR_ 
#define _V_DESCRIPTOR_
 // some code here
#endif

person Aaron    schedule 04.07.2011    source источник
comment
По моему опыту, файлы .cpp не содержат каких-либо охранников включения... Также обратите внимание, что #define __XYZ__ не является переносимым, это имя макроса зарезервировано!   -  person Ben Voigt    schedule 04.07.2011
comment
Моя ошибка, я имел в виду файлы .h. Я отредактирую.   -  person Aaron    schedule 04.07.2011
comment
Ваш новый пример по-прежнему является зарезервированным именем. Все, что начинается с двойного подчеркивания или подчеркивания + заглавной буквы, зарезервировано и не должно использоваться в вашем коде.   -  person Ben Voigt    schedule 04.07.2011
comment
Хорошо. Спасибо. У меня есть заголовочный файл, который использует именно это соглашение (см. Учебник по Ogre3d framework), так что... приятно знать, что мне не следует этого делать. Я исправлю в редактировании.   -  person Aaron    schedule 04.07.2011
comment
Я знаю, что есть много руководств, которые предлагают этот шаблон. Мне понадобилось время, чтобы избавиться от вредной привычки.   -  person Ben Voigt    schedule 04.07.2011
comment
Все основные компиляторы поддерживают #pragma один раз, и у него могут быть преимущества перед защитой заголовков, например, он не создает определение, которое может быть случайно повторно использовано в другом месте или написано с ошибкой. Его поддерживают Clang, GCC (начиная с версии 3.4) и Microsoft VC++. en.wikipedia.org/wiki/Pragma_once   -  person Beached    schedule 16.10.2014


Ответы (1)


Чтобы ответить на ваш реальный вопрос, я не думаю, что у Visual Studio есть какой-либо вариант для этого, но это было бы довольно просто сделать с помощью Visual Studio Extensibility Toolkit, поэтому я уверен, что кто-то написал макрос, который вы можете скачать. Посмотрите Инструменты -> Диспетчер расширений -> Онлайн-галерея, там есть большой каталог бесплатных надстроек, которые вы можете установить.

Например, появляется мастер классов Zoom C++. для создания обоих стилей включения защиты. Но я никогда не использовал его, поэтому я не могу порекомендовать тот или иной способ.

person Ben Voigt    schedule 04.07.2011