2011-03-17 5 views
1

Je ne peux pas faire emacs indentation le code suivant correctement. D'une certaine manière, il ne peut pas analyser correctement les macros du préprocesseur. Tout conseil serait apprécié.Emacs problème d'indentation avec 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; 
} 

Répondre

1

Le problème est que Emacs va analyser les deux parties d'un #if#else construction. Pour obtenir une indentation correcte, vous devez vous assurer que vous n'avez pas de parenthèses ou d'accolades déséquilibrées. Concrètement, vous pouvez réécrire les éléments suivants:

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

en:

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

Salut, merci pour votre réponse rapide. Je pense que cela aidera lors du développement du nouveau code. Cependant, j'ai beaucoup de code existant que j'ai besoin de mettre en retrait correctement. Je commence à comprendre que le problème est l'analyse syntaxique d'emacs qui ne peut pas analyser correctement les macros du préprocesseur. La solution pourrait être de savoir s'il existe un moyen de forcer l'analyse à utiliser le même composant syntaxique pour la ligne suivant "#else" que dans le précédent "#if"/"# ifdef"/"# ifndef". Quelqu'un at-il une idée de comment le faire? – Matti