pp宏的emacs缩进问题

pp宏的emacs缩进问题,emacs,Emacs,我无法使emacs正确缩进以下代码。不知何故,它无法正确解析预处理器宏。如有任何建议,将不胜感激 #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 |

我无法使emacs正确缩进以下代码。不知何故,它无法正确解析预处理器宏。如有任何建议,将不胜感激

#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;
}
#ifdef WIN32
void func1()
#否则
void func1(int参数)
#恩迪夫
{
如果(a>2 | |
#ifdef WIN32
(b<3))
#否则
(b>3)
#恩迪夫
c=1;
如果(b>2 | |)
#ifdef WIN32
(a>4)
#否则
(a<4))
#恩迪夫
c=2;
虚假陈述;
}

问题是Emacs将解析
\if
\else
构造的两个部分。要获得正确的缩进,必须确保没有不平衡的括号或大括号。具体来说,您可以重写以下内容:

if (a > 2 ||
#ifdef WIN32
    (b < 3))
#else
    (b > 3))
#endif
if(a>2||
#ifdef WIN32
(b<3))
#否则
(b>3)
#恩迪夫
进入:

if(a>2||
#ifdef WIN32
(b<3)
#否则
(b>3)
#恩迪夫
)

问题是Emacs将解析
\if
\else
构造的两个部分。要获得正确的缩进,必须确保没有不平衡的括号或大括号。具体来说,您可以重写以下内容:

if (a > 2 ||
#ifdef WIN32
    (b < 3))
#else
    (b > 3))
#endif
if(a>2||
#ifdef WIN32
(b<3))
#否则
(b>3)
#恩迪夫
进入:

if(a>2||
#ifdef WIN32
(b<3)
#否则
(b>3)
#恩迪夫
)

您好,谢谢您的快速回答。我认为这将有助于开发新代码。但是,我有大量需要正确缩进的现有代码。我开始明白,问题是emacs的语法分析无法正确解析预处理器宏。如果有一种方法可以迫使分析对“#else”后面的行使用与前面的“#if”/“#ifdef”/“#ifndef”相同的语法成分,那么解决方案可能是。有人知道怎么做吗?嗨,谢谢你的快速回答。我认为这将有助于开发新代码。但是,我有大量需要正确缩进的现有代码。我开始明白,问题是emacs的语法分析无法正确解析预处理器宏。如果有一种方法可以迫使分析对“#else”后面的行使用与前面的“#if”/“#ifdef”/“#ifndef”相同的语法成分,那么解决方案可能是。有人知道怎么做吗?