Konverter untuk definisi fungsi C gaya lama

pemrograman


Hai,

Saya bekerja sejak 6 tahun dengan perangkat lunak warisan yang besar.
SW ini berisi ribuan fungsi c gaya lama dengan banyak parameter.

Berikut contoh dengan beberapa parameter:

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

Ketika saya mulai di perusahaan, saya mengubah kode dengan menghapus kode tersebut
antara tanda kurung bulat dan tanda kurung pengganti; oleh ,:

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

Yang saya tidak tahu saat itu adalah parameternya bisa ditukar seperti ini:

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

Di sini cara koreksi saya akan menukar x dan y, yang berakibat fatal.

Saya mengetahui hal ini kemudian, karena program menunjukkan perilaku tidak terdefinisi yang disebabkan
oleh salah satu perubahanku.

Tapi saya sudah mengubah ratusan fungsi hingga 20 parameter sebelumnya.

Jadi yang saya perlukan sekarang adalah parser, yang mem-parsing semua kode tanpa modifikasi saya, menemukan definisi dan laporan fungsi gaya lama
parameter yang ditukar.

Adakah yang tahu kalau alat seperti itu ada? Atau beberapa kode c atau C++ yang bisa saya gunakan
sebagai basis dan memodifikasi sesuai kebutuhan saya?

Terima kasih dan br
Kristen

Apa yang saya coba:

Saya mulai melakukannya dengan tangan. 🙁

Solusi 1

Pilihan terbaik Anda adalah membuang versi revisi Anda, dan mengembalikannya ke versi asli. Kemudian jika Anda harus memfaktorkan ulang definisi, tulis kode untuk melakukan itu dari versi asli yang berfungsi alih-alih mencoba memeriksa setiap fungsi secara manual.

Saya tidak mengetahui adanya perangkat lunak yang dapat memperbaiki versi Anda saat ini, jadi Anda harus menulisnya – dan itu adalah pekerjaan dua kali lipat untuk mengembalikan ke versi yang diketahui bagus!

Solusi 2

Dulu ada utilitas yang didistribusikan dengan GCC yang disebut protoize yang dapat membantu mengubah definisi fungsi K&R ke ANSI. Namun, tampaknya hal ini telah dihentikan sekitar gcc 4, yang dimulai sekitar tahun 2005. Ada beberapa informasi tentang masalah ini di sini: Peringatan Protoisasi[^] Jika tidak ada show stopper untuk Anda, Anda mungkin dapat mengekstrak protoisasi dari pohon sumber, dan mencoba mengompilasinya. Ada juga cproto : CPROTO – Menghasilkan prototipe fungsi[^] Meskipun proyek tersebut tampaknya tidak berfungsi, Anda mungkin dapat menelusuri kode sumbernya. Sejauh yang saya tahu, baik cproto maupun protoize memiliki masalah, jadi diperlukan kehati-hatian saat bekerja dengan keduanya.

コメント

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