Отступ Emacs после макроса в C
#define INIT_MACRO create(); some(); enviroment();
...
void function(){
INIT_MACRO
extra_indented();
normal_indented();
}
как мне заставить emacs правильно справиться с вышеуказанной ситуацией, когда он запрашивает автоматический отступ?
РЕДАКТИРОВАТЬ единственное решение, которое я вижу, - сказать emacs, что нужно обрабатывать строки, содержащие только заглавные буквы, подчеркивания и пробелы, как если бы они имели точку с запятой в конце... но как бы я это сделал?
4 ответа
Это работает:
#define INIT_MACRO do { create(); some(); enviroment(); } while (0)
...
void function(){
INIT_MACRO;
extra_indented();
normal_indented();
}
Обычно лучше использовать этот трюк, чтобы избежать проблем при использовании:
if (...)
MACRO();
else
...
и точка с запятой в каждой строке легче читать по моему мнению.
cc-mode
имеет этот настраиваемый через c-macro-names-with-semicolon
переменная. Смотрите документацию для получения дополнительной информации.
Почему бы вам просто не завершить строку INIT_MACRO символом?
Использование макроса в качестве обёртки функции без ();
в конце, когда вы называете это и без окружения определить с do {
а также } while(0)
в любом случае это не делается... делает код уродливым, сложным в обслуживании и не поддерживается одним стандартом кодирования C... другими словами, это называется кодом кровоточащего глаза. Так что это невозможно с настройками по умолчанию.
Вы должны будете сделать свой собственный основной / второстепенный режим. Для поддержки этого нового типа синтаксиса... Или вы можете взглянуть на ваш текущий cc-mode.el.