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

Настройка включения-защиты для Eclipse CDT

Я хочу создать автоматически созданный include-guard, создав новый С++-класс с Eclipse/CDT, но я не могу найти способ изменить атрибут ${include_guard_symbol}.

Мое желание - это include-guard с префиксом пространства имен, например:

#ifndef NAMSPACE1_NAMESPACE2_HEADER_HPP

Но если я использую #ifndef ${namespace_name}_${include_guard_symbol} для этого, он будет производить:

namepace1::namespace2::_HEADER_HPP

Как я могу это сделать?

4b9b3361

Ответ 1

У меня было поколение в источнике для CDT, и я нашел недокументированную настройку предпочтений, которую вы можете использовать для изменения того, что генерируется ${include_guard_symbol}. Там нет графического интерфейса, но если вы добавите параметр codetemplates.includeGuardGenerationScheme в <projectpath>/.settings/org.eclipse.cdt.ui.prefs, вы можете выбрать между именем файла (по умолчанию), пути к файлу или UUID.

Учитывая файл <projectpath>/src/include/Class.h, следующие значения дают следующие результаты:

  • 0 дает имя файла в верхнем регистре, то есть CLASS_H_
  • 1 дает UUID, например. HC9ABE718_D04E_411C_B5A2_F9FE1D9F9409
  • 2 дает путь к файлу в верхнем регистре, то есть SRC_INCLUDE_CLASS_H_

Чтобы избежать каких-либо сомнений, здесь содержимое нашего .settings/org.eclipse.cdt.ui.prefs:

codetemplates.includeGuardGenerationScheme=2
eclipse.preferences.version=1
formatter_settings_version=1

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

Соответствующий код находится в этих файлах в источнике CDT:

  • core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/PreferenceConstants.java для констант для каждой опции
  • core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/codemanipulation/StubUtility.java для метода generateIncludeGuardSymbol(), который выполняет работу.

Было бы неплохо увидеть добавленную дополнительную опцию для использования пространства имен и графического интерфейса.

Ответ 2

Я использую Eclipse Oxygen (CDT 9.3), и, как описывает Eelke в своем комментарии, для этого уже существует параметр пользовательского интерфейса.

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

Найдите "охрану" в диалоговом окне настроек или перейдите к C/С++ > "Стиль кода" > "Стиль имени" и выберите "Код" > "Включить охрану", а затем выберите из доступных схем защиты.

введите описание изображения здесь