#define INIT_MACRO create(); some(); enviroment();
...
void function(){
INIT_MACRO
extra_indented();
normal_indented();
}
当请求自动缩进时,如何使emacs正确处理上述情况?
编辑我看到的唯一解决办法就是告诉emacs处理只包含大写字母,下划线和空格的行,就像它们最后有分号一样......但我该怎么做?答案 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。