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。