如何自动将K& R函数声明转换为ANSI函数声明?

时间:2011-11-09 16:21:44

标签: c function declaration indentation kr-c

// K&R syntax
int foo(a, p) 
int a; 
char *p; 
{ 
    return 0; 
}

// ANSI syntax
int foo(int a, char *p) 
{ 
    return 0; 
}

如您所见,在K& R样式中,变量的类型在新行中而不是在大括号中声明。如何自动将K& R函数声明转换为ANSI函数声明?在Linux中有人知道这么容易使用的工具吗?

3 个答案:

答案 0 :(得分:2)

您可以使用cproto或protoize(GCC的一部分)来生成函数原型或将旧式(K& R)函数转换为ANSI格式。

答案 1 :(得分:0)

由于您想要转换多行字符串,您可以考虑perl

你有

void old_style( c , a ) char c; int a; { /* some multiline code */ }

并且必须

void old_style( char c, int a) {}

所以

perl -i.bkp -nle 's/\((void|int|char|float|long) [a-zA-Z0-9_-]*\)([a-zA-Z0-9_-] ?,[a-zA-Z0-9_-] ?)\(.*{\)/\1(\2)/g'

或类似的东西,可以解决问题。

如果你试一试并在评论中发布

的输出,那就更容易解决正确的正则表达式
diff file.c file.c.bkp

为每个源文件。

答案 2 :(得分:0)

1)如果要为.h文件创建标准C原型,请使用mkproto.c

  

mkproto thisoldfile.c> thisoldfile.h

如果需要,您还可以在C文件定义中粘贴旧的K& R代码。