c - 如何在包含 BEGIN_C_DECLS 宏的行上正确应用缩进?

标签 c indentation

我正在使用 indent 实用程序在我的代码上应用代码样式。我遇到以下问题:

#ifdef __cplusplus
#define BEGIN_C_DECLS extern "C" {
#define END_C_DECLS   }
#else /* !__cplusplus */
#define BEGIN_C_DECLS
#define END_C_DECLS
#endif /* __cplusplus */

BEGIN_C_DECLS 

int x;
...
END_C_DECLS

应用indent -npro -kr -i8 -ts8 -sob -l80 -ss -ncs后我得到: BEGIN_C_DECLS int x 在同一行。

有什么想法如何将它们保持在不同的行上吗?

最佳答案

由于 indent 不是 C 解析器(不可能是因为它无法处理 #include 指令),因此它使用启发式方法来确定哪些标记是标识符或 typedef 名称以及哪种标记这些形成的句法单元。这显然对你正在做的事情做出了错误的猜测——修改 C 语法。

你可以做的就是像这样包装宏

/* *INDENT-OFF* */
BEGIN_C_DECLS
/* *INDENT-ON* */

int x;

/* *INDENT-OFF* */
END_C_DECLS
/* *INDENT-ON* */

另一种方法是明智地使用空预处理器指令#(最终它对某事有用!):

#
BEGIN_C_DECLS
#
int     x;

#
END_C_DECLS
#

关于c - 如何在包含 BEGIN_C_DECLS 宏的行上正确应用缩进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17087509/

相关文章:

用于编辑文件的 Emacs 模式,其中缩进意味着结构

c - 简单递归函数的误解

c - 如何在管道之间传递值

c - 大括号和注释之间的间距

select - Sublime Text 3 : Keep entire lines selected when indenting with tab

php - 抑制 PHP_Beautify 中的下一个标记

tabs - Kate "tab-spacing character"删除或关闭

c - 将变量设置为函数的返回类型

c - 输出说明 : A complicated pointer arithmetic

c - 从二进制文件读取结构并转换为C中的十六进制