Как автоматически преобразовать объявление функции K & R в объявление функции ANSI? - PullRequest
3 голосов
/ 09 ноября 2011
// 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 ]

2 голосов
/ 09 ноября 2011

Вы можете использовать cproto или protoize (часть GCC) для генерации прототипов функций или преобразования функций старого стиля (K & R) в формат ANSI.

0 голосов
/ 04 июля 2017

1) если вы хотите создать стандартные прототипы C для файла .h, используйте mkproto.c

mkproto thisoldfile.c> thisoldfile.h

Вы тогдапри желании также можно вставить старый код K & R в определение файла C.

0 голосов
/ 10 ноября 2013

Поскольку вы хотите преобразовать многострочную строку, вы должны рассмотреть perl

у вас есть

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

и должен иметь

void old_style( char c, int a) {}

So

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

для каждого из ваших исходных файлов.

...