Неверный отступ в Emacs в классе C ++ со спецификацией экспорта DLL - PullRequest
2 голосов
/ 05 апреля 2010

Я часто пишу классы со спецификацией экспорта / импорта DLL, но это, похоже, сбивает с толку синтаксический анализатор emacs. Я получаю что-то вроде:

class myDllSpec Foo {
 public:
  Foo( void );
};

Обратите внимание, что спецификация доступа "public:" имеет неверный отступ, а также все, что следует за ней.

Когда я прошу emacs описать синтаксис в начале строки, содержащей public, я получаю возврат:

((label 352))

Если я удалю myDllSpec, отступ будет правильным, и emacs скажет мне, что синтаксис здесь:

((inclass 352) (access-label 352))

Что кажется правильным и разумным. Поэтому я пришел к выводу, что синтаксический анализатор не может обработать спецификацию экспорта DLL, и именно это вызывает мои проблемы с отступами.

К сожалению, я не знаю, как научить синтаксический анализатор моим меткам. Кажется, это довольно распространенная практика, поэтому я надеюсь, что есть способ обойти это.

1 Ответ

2 голосов
/ 06 апреля 2010

С http://www.emacswiki.org/emacs/IndentingC#toc13 вы можете установить стиль «Microsoft».

Бросьте это в свой .emacs:

(c-add-style "microsoft"
             '("stroustrup"
               (c-offsets-alist
                (innamespace . -)
                (inline-open . 0)
                (inher-cont . c-lineup-multi-inher)
                (arglist-cont-nonempty . +)
                (template-args-cont . +))))
(setq c-default-style "microsoft")

или оставьте значение по умолчанию и установите его вручную с помощью M-x c-set-style на microsoft.

Ваш пример отображает этот отступ:

class myDllSpec Foo {
public:
    Foo( void );
};
...