3

我正在使用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在同一行。

任何想法如何将它们保持在不同的行上?

4

1 回答 1

3

由于 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
#
于 2013-06-13T12:56:40.950 回答