Convertidor para definiciones de funciones C de estilo antiguo

programación


Hola,

Trabajo desde hace 6 años con un enorme software heredado.
Este SW contiene miles de funciones C de estilo antiguo con muchos parámetros.

Aquí un ejemplo con algunos parámetros:

old_function (x,y,z)
int x;
int y;
int z;
{
  // some code
  return (0);
}

Cuando comencé en la empresa, cambié el código eliminando el código.
entre los soportes redondos y reemplazando; por ,:

old_function (int x, int y, int z)
{
  // some code
  return (0);
}

Lo que no sabía en ese momento es que los parámetros se pueden intercambiar así:

old_function (x,y,z)
int y;
int x;
int z;
{
  // some code
  return (0);
}

Aquí mi forma de corrección intercambiaría xey, lo cual es fatal.

Descubrí esto más tarde, porque el programa mostró un comportamiento indefinido causado
por uno de mis cambios.

Pero ya cambié cientos de funciones con hasta 20 parámetros antes.

Entonces, lo que necesito ahora es un analizador, que analice todo el código sin mis modificaciones, encuentre las definiciones e informes de funciones de estilo antiguo.
parámetros intercambiados.

¿Alguien sabe si existe tal herramienta? O algún código c o C++ que pueda usar
como base y modificar según mis necesidades?

gracias y hermano
cristiano

Lo que he probado:

Empecé a hacerlo a mano. 🙁

Solución 1

Lo mejor que puede hacer es desechar la versión revisada y volver a la original. Luego, si debe refactorizar las definiciones, escriba el código para hacerlo desde la versión funcional original en lugar de intentar verificar manualmente todas y cada una de las funciones.

No conozco ningún software existente que corrija su versión actual, por lo que tendría que escribirlo, ¡y eso es el doble de trabajo que volver a una versión que se sabe que es buena!

Solución 2

Solía ​​haber una utilidad distribuida con GCC llamada protoize que podía ayudar a convertir definiciones de funciones K&R a ANSI. Sin embargo, parece haber sido descontinuado alrededor de gcc 4, que se remonta a alrededor de 2005. Aquí hay información sobre los problemas: Advertencias sobre protoize[^] Si no hay ningún obstáculo para usted, es posible que pueda extraer protoize del árbol fuente e intentar compilarlo. También hay cproto: CPROTO – Generar prototipos de funciones[^] Si bien el proyecto parece estar extinto, es posible que puedas rastrear su código fuente. Hasta donde yo sé, tanto cproto como protoize tienen problemas, por lo que es necesario tener cuidado al trabajar con cualquiera de ellos.

コメント

タイトルとURLをコピーしました