Emacs在C中的宏后缩进

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

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

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

这有效:

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

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

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

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

cc-mode可通过c-macro-names-with-semicolon变量进行自定义。 有关详细信息,请参阅文档 。

你为什么不用一个;结束INIT_MACRO线?

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

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