Настройка include-guard для Eclipse CDT

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

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

#ifndef NAMSPACE1_NAMESPACE2_HEADER_HPP

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

namepace1::namespace2::_HEADER_HPP

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

2 ответа

Я покопался в источнике CDT и нашел недокументированную настройку предпочтений, которую можно использовать для изменения того, что генерируется ${include_guard_symbol}, Там также нет GUI для этого, но если вы добавите 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() метод, который делает работу.

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

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

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

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

Другие вопросы по тегам