Emacs在C中的宏后缩进

时间:2011-07-12 15:35:37

标签: c emacs macros auto-indent

#define INIT_MACRO create(); some(); enviroment();
...
void function(){
  INIT_MACRO
    extra_indented();
  normal_indented();
}

当请求自动缩进时,如何使emacs正确处理上述情况?

编辑我看到的唯一解决办法就是告诉emacs处理只包含大写字母,下划线和空格的行,就像它们最后有分号一样......但我该怎么做?

4 个答案:

答案 0 :(得分:10)

这有效:

#define INIT_MACRO do { create(); some(); enviroment(); } while (0)
...
void function(){
  INIT_MACRO;
  extra_indented();
  normal_indented();
}

使用时通常最好使用此技巧来避免问题:

if (...)
  MACRO();
else
  ...

在我看来,每行上的分号更容易阅读。

答案 1 :(得分:4)

cc-mode具有此可自定义的c-macro-names-with-semicolon变量。有关详细信息,请参阅documentation

答案 2 :(得分:1)

为什么不用一个;?

结束INIT_MACRO行

答案 3 :(得分:0)

当你调用它时,使用宏作为函数包装器而不是();,并且没有用do {} while(0)包围定义。但是代码很丑,难以维护,并且它不受一个C编码标准的支持......换句话说,它被称为流血眼码。因此默认设置无法实现。

您需要制作自己的主要/次要模式。要支持这种新类型的语法......或者您可以查看当前的cc-mode.el。