// 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中有人知道这么容易使用的工具吗?
答案 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代码。