参见以下示例。我不希望,
字符位于单独的行中。我尝试了所有indent
选项,但似乎没有人支持这一点。
$ indent -version
GNU indent 2.2.9
$ cat foo.c
void
foo ()
{
struct_a arr[] = {
{&a, sizeof (a)},
{&b, sizeof (b)},
{&c, sizeof (c)},
{&d, sizeof (d)},
};
}
$ indent -st foo.c
void
foo ()
{
struct_a arr[] = {
{&a, sizeof (a)}
,
{&b, sizeof (b)}
,
{&c, sizeof (c)}
,
{&d, sizeof (d)}
,
};
}
$
答案1
参考1.7 声明:
如果指定了“-bc”选项,则声明中的每个逗号后都会强制换行。例如,
int a,
b,
c;
使用 '-nbc' 选项后,结果如下
int a, b, c;
您需要使用该-nbc
选项来获取想要的输出。
请注意,这将禁用,
声明后的每个换行符。
你可能想看看1.10 禁用格式化关闭特定代码段的格式化。
例如:
void
foo ()
{
/* *INDENT-OFF* */
struct_a arr[] = {
{&a, sizeof (a)},
{&b, sizeof (b)},
{&c, sizeof (c)},
{&d, sizeof (d)},
};
/* *INDENT-ON* */
}
答案2
看起来真是sizeof()
太令人困惑了indent
。所以我有一个解决方法:首先,将所有出现的sizeof
with SIZEOF
(例如 using sed
)更改为 invoke indent
,然后改SIZEOF
回sizeof
。
$ cat foo.c
void foo() {
struct_a arr[] = {
{&a, sizeof (a), 1},
{&b, sizeof (b), 1},
{&c, sizeof (c), 1},
{&d, sizeof (d), 1},
};
}
$ indent -st foo.c
void
foo ()
{
struct_a arr[] = {
{&a, sizeof (a), 1}
,
{&b, sizeof (b), 1}
,
{&c, sizeof (c), 1}
,
{&d, sizeof (d), 1}
,
};
}
$ sed s/sizeof/SIZEOF/g foo.c | indent -st | sed s/SIZEOF/sizeof/g
void
foo ()
{
struct_a arr[] = {
{&a, sizeof (a), 1},
{&b, sizeof (b), 1},
{&c, sizeof (c), 1},
{&d, sizeof (d), 1},
};
}
$