2011-03-17 106 views
1

我無法使emacs正確縮進以下代碼。不知何故,它無法正確解析預處理器宏。任何建議將不勝感激。emacs pp-macros壓縮問題

#ifdef WIN32 
void func1() 
#else 
    void func1(int parameter) 
#endif 
{ 

    if (a > 2 || 
#ifdef WIN32 
     (b < 3)) 
#else 
     (b > 3)) 
#endif 
     c = 1; 
     else if (b > 2 || 
#ifdef WIN32 
       (a > 4)) 
#else 
      (a < 4)) 
#endif 
      c = 2; 

mystatement; 
} 

回答

1

的問題是,Emacs會解析#if#else構建體的兩個部分。爲了得到正確的縮進,你必須確保你沒有不平衡的圓括號或大括號。具體而言,你可以重寫如下:

if (a > 2 || 
#ifdef WIN32 
    (b < 3)) 
#else 
    (b > 3)) 
#endif 

分爲:

if (a > 2 || 
#ifdef WIN32 
    (b < 3) 
#else 
    (b > 3) 
#endif 
    ) 
+1

您好,感謝您的快速答覆。我認爲這將有助於開發新代碼。 但是,我有大量的現有代碼需要正確縮進。 我開始明白,問題是emacs的語法分析,它無法正確分析預處理器宏。 解決方案可能是如果有一種方法可以強制分析使用與之前的「#if」/「#ifdef」/「#ifndef」一樣的「#else」之後的行的相同語法組件。有沒有人有線索如何做到這一點? – Matti 2011-03-18 06:32:36