2010-04-05 63 views
2

我經常使用DLL導出/導入規範編寫類,但這似乎混淆了emacs的語法分析器。我最終是這樣的:使用DLL導出規範的C++類中的emacs縮進不正確

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

注意,「市民:」訪問規格不正確地縮進,以及它後面的一切。

當我問的Emacs來形容含公共行開頭的語法,我得到的回報:

((label 352)) 

如果我刪除myDllSpec,壓痕是正確的,和emacs告訴我,那裏的語法是:

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

這似乎是正確和合理的。所以我得出這樣的結論:語法分析程序不能處理DLL導出規範,並且這是導致我的縮進問題的原因。

不幸的是,我不知道如何教解析器關於我的標籤。似乎這是很常見的做法,所以我希望有一種解決方法。

回答

2

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); 
};