Emacs在C中宏后缩进

Emacs在C中宏后缩进,c,emacs,macros,auto-indent,C,Emacs,Macros,Auto Indent,当要求emacs自动缩进时,我如何使emacs正确处理上述情况 编辑我看到的唯一解决方案是告诉emacs将只包含大写、下划线和空格的行视为末尾有分号。。。但是我该怎么做呢?这是可行的: #define INIT_MACRO create(); some(); enviroment(); ... void function(){ INIT_MACRO extra_indented(); normal_indented(); } 通常,使用以下方法时,最好使用此技巧以避免出现问题:

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

编辑我看到的唯一解决方案是告诉emacs将只包含大写、下划线和空格的行视为末尾有分号。。。但是我该怎么做呢?

这是可行的:

#define INIT_MACRO create(); some(); enviroment();
...
void function(){
  INIT_MACRO
    extra_indented();
  normal_indented();
}
通常,使用以下方法时,最好使用此技巧以避免出现问题:

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

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

为什么不在INIT_宏行末尾加一个

使用宏作为函数包装,而不使用
()并使用
do{
}包围define,而(0)
无论如何都不会完成。。使代码难看,难以维护,而且它不受一个C编码标准的支持。。。换言之,它被称为“流血的眼睛密码”。因此,使用默认设置是不可能的


你需要自己制作大调/小调模式。要支持这种新类型的语法。。。或者您可以查看当前的cc模式。el。

cc模式
可通过
c-macro-names-with-semicolon
变量自定义此模式。有关更多信息,请参阅。

我认为这是行不通的。您可以删除最后一个
并将其添加到宏本身。这不会愚弄emacs缩进。为什么是一个宏而不是一个函数?这是我迄今为止一直采用的方式,但我不会随意更改存储库中的代码,因为我的缩进中断了。。。(参见编辑)正如我告诉过你的,对我来说,这不仅是为了缩进,也是为了安全性和可读性。这是正确的观点,但我仍然希望在某些情况下,我能按照编辑中的建议去做
if (...)
  MACRO();
else
  ...