gpt4 book ai didi

c - 将 C 代码中的左大括号移动到下一行?

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:29 25 4
gpt4 key购买 nike

我有几个 C 源文件需要更改一个特定的格式设置功能。在文件的某些部分,

if (x == NULL) {
...
}

需要改成

if (x == NULL)
{
...
}

我希望使用“缩进”命令,但它太激进了。它想用所有选项更改整个文件。

我想我可以在 Perl 或什至 Sed 中做到这一点,但我对两者都不太了解,无法弄清楚。

最佳答案

这是怎么回事?

$ cat tst.c
#include "stdio.h"

int
main ()
{
void *x;

if (x == NULL) {
printf("darn\n");
}

return 0;
}

.

$ indent -i 4 -bli 0 -npcs -st tst.c
#include "stdio.h"

int
main()
{
void *x;

if (x == NULL)
{
printf("darn\n");
}

return 0;
}

如果您有其他不应更改的代码段示例,请创建一个包含这些代码段的示例程序并调整 indent选项,直到您满意它输出的代码风格是您想要的风格。


在评论中@melpomene had mentionedindent并不总是正确处理混淆代码并给出了 prin\<newline>tf("...") 的例子.我不知道其他情况,但您可以在 sed 和 gcc 的帮助下通过预处理来处理该情况:

$ cat tst.c
#include "stdio.h"

int
main ()
{
void *x;

// here is a comment
if (x == NULL) {
prin\
tf("darn\n");
}

return 0;
}

.

$ indent -i 4 -bli 0 -npcs -st tst.c
#include "stdio.h"

int
main()
{
void *x;

// here is a comment
if (x == NULL)
{
prin tf("darn\n");
}

return 0;
}

.

$ sed 's/a/aA/g;s/__/aB/g;s/#/aC/g' tst.c |
gcc -CC -P -traditional-cpp -E - |
sed 's/aC/#/g;s/aB/__/g;s/aA/a/g'
#include "stdio.h"

int
main ()
{
void *x;

// here is a comment
if (x == NULL) {
printf("darn\n");
}

return 0;
}

.

$ sed 's/a/aA/g;s/__/aB/g;s/#/aC/g' tst.c |
gcc -CC -P -traditional-cpp -E - |
sed 's/aC/#/g;s/aB/__/g;s/aA/a/g' |
indent -i 4 -bli 0 -npcs -st
#include "stdio.h"

int
main()
{
void *x;

// here is a comment
if (x == NULL)
{
printf("darn\n");
}

return 0;
}

关于c - 将 C 代码中的左大括号移动到下一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56399127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com