Как заставить emacs обрабатывать #ifdef и #endif как '{' и '}'? - PullRequest
6 голосов
/ 03 февраля 2012

Я бы хотел, чтобы emacs обрабатывал "#ifdef" точно так же, как "{" и "#endif" как "}" в отношении отступа. Вот так:

#ifdef __linux__
    #include <sys/socket.h>
#endif

int func(void)
{
    int foo = 0;

    #ifdef DO_STUFF
        foo = do_stuff();
    #endif

    return foo;
}

вместо:

#ifdef __linux__
#include <sys/socket.h>
#endif

int func(void)
{
    int foo = 0;

#ifdef DO_STUFF
    foo = do_stuff();
#endif

    return foo;
}

Мешать с "cpp-macro" не помогает. Как бы я это сделал? Спасибо!

Ответы [ 2 ]

4 голосов
/ 03 февраля 2012

Вы можете использовать этот файл el для emacs: http://www.emacswiki.org/emacs/ppindent.el

Вы можете найти много информации об отступах в emacs здесь: http://www.emacswiki.org/emacs/IndentingC

3 голосов
/ 03 февраля 2012

Комментарии препроцессора - это , которые должны были начинаться в первом столбце, так что emacs там корректен, однако в наши дни компиляторы обычно позволяют им иметь отступ.(См. Отступ # определяет )

Тем не менее, см. Отступ директив препроцессора в виде кода C в emacs для обсуждения этого.На самом деле, я мог бы попытаться закрыть этот вопрос как дубликат этого.

Я согласен с некоторыми комментариями по этому вопросу, поскольку ошибочно думать о препроцессоре как о блоке или лексически ограниченном пространстве,поэтому на самом деле вредно делать отступ таким же образом, как и в обычном коде C.

...