// 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 中这么容易使用的工具吗?
// 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 中这么容易使用的工具吗?
您可以使用cproto或 protoize(GCC 的一部分)生成函数原型或将旧式 (K&R) 函数转换为 ANSI 格式。
既然你想转换一个多行字符串,你应该考虑 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
对于您的每个源文件。
1) 如果您想为 .h 文件创建标准 C 原型,请使用 mkproto.c
mkproto thisoldfile.c > thisoldfile.h
如果需要,您还可以粘贴 C 文件定义中的旧 K&R 代码。