代码之家  ›  专栏  ›  技术社区  ›  Michael Daum

使用DLL导出规范的C++类中的错误Emacs缩进

  •  2
  • Michael Daum  · 技术社区  · 14 年前

    我经常使用dll导出/导入规范编写类,但这似乎混淆了emacs的语法解析器。最后我得到了这样的结果:

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

    请注意,“public:”访问规范缩进不正确,以及其后的所有内容。

    当我要求emacs描述包含public的行开头的语法时,返回:

    ((label 352))
    

    如果我删除mydllspec,缩进是正确的,emacs告诉我这里的语法是:

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

    这似乎是正确和合理的。因此,我得出结论,语法分析器无法处理dll导出规范,这就是造成缩进问题的原因。

    不幸的是,我不知道如何教解析器关于我的标签。看来这是很常见的做法,所以我希望有办法解决。

    1 回复  |  直到 14 年前
        1
  •  2
  •   ayman    14 年前

    http://www.emacswiki.org/emacs/IndentingC#toc13 你可以建立一个“微软”风格。

    把这个放到你的 .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 );
    };