3
// 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 中这么容易使用的工具吗?

4

3 回答 3

2

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

于 2011-11-09T17:02:49.293 回答
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

对于您的每个源文件。

于 2013-11-09T20:08:45.287 回答
0

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

mkproto thisoldfile.c > thisoldfile.h

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

于 2017-07-04T19:06:07.947 回答