При определении шаблонов кода в Eclipse CDT, мы можем использовать переменную с именем ${include_guard_symbol}
что переводится как MYFILE_H
,
Я хотел бы иметь что-то более явное: SRC_MYFOLDER_MYFILE_H
,
Я следовал инструкциям, приведенным в ответ на вопрос переполнения стека Настройка include-guard для Eclipse CDT, но все, что я получаю, это для ${include_guard_symbol}
вернуть пустую строку! Я также видел другие связанные вопросы о переполнении стека о добавление пространства имен к включаемой защите, но это не то, что я ищу.
Я использую Eclipse версии 3.5.2 с CDT версии 6.0.2.
Есть ли другой способ достижения желаемого результата?
Самая старая версия, которую я установил, — 3.7, и я проверил там и на 4.2, и ссылочная ссылка делает именно то, что хочет ОП. (OP использует 3.5.2). Для тех, кто приезжает сюда в будущем, здесь есть шаги
\.metadata\.plugins\org.eclipse.core.runtime\settings
org.eclipse.cdt.ui.prefs
в текстовый редакторcodetemplates.includeGuardGenerationScheme=2
Я создал папку с именем MyFolder в моей папке src. Затем я щелкнул правой кнопкой мыши и добавил новый заголовочный файл, результат был:
#ifndef SRC_MYFOLDER_TEST_H_
#define SRC_MYFOLDER_TEST_H_
#endif /* SRC_MYFOLDER_TEST_H_ */
Основные моменты из этого: Как настроить шаблоны кода Eclipse CDT
Одним из решений является выбросить ${include_guard_symbol}
в шаблоне все вместе, и определись сам, возможно, с использованием некоторых других предопределенных переменных. Что-то вроде этого:
${filecomment}
#ifndef MyProject_${file_base}_h
#define MyProject_${file_base}_h
${typecomment}
${declarations}
#endif /* MyProject_${file_base}_h */
Таким образом, для заголовочного файла с именем inc / Foo.h, включающий охранник будет вставлен так:
#ifndef MyProject_Foo_h
#define MyProject_Foo_h
К сожалению, кажется, нет способа настроить намного больше. Например, если я определил класс, вложенный в пространство имен, я мог бы захотеть поместить пространство имен как часть включенного защитника. Я не могу найти способ сделать это в затмении, в настоящее время.
Не совсем ответ на ваш вопрос, но я хотел бы предложить альтернативу. Защитники включения обеспечивают рабочий, хотя и грубый способ запретить включение кода в заголовочный файл более одного раза для каждой единицы компиляции. В качестве альтернативы вы можете использовать
#pragma once
директива компилятора. Я понимаю, что это не определено в стандарте, но поддерживается многими компиляторами, включая GNU, Clang, MSVC и Intel. Если вы используете #pragma once
вы теряете небольшую переносимость и избегаете столкновений имен, которые, как я полагаю, являются причиной, по которой вы хотите изменить ${include_guard_symbol}
на первом месте.
Вы также можете проверить http://en.wikipedia.org/wiki/Pragma_once для более тщательного обсуждения.