Trình chuyển đổi định nghĩa hàm C kiểu cũ

lập trình


CHÀO,

Tôi đã làm việc được 6 năm với một phần mềm kế thừa khổng lồ.
SW này chứa hàng nghìn hàm c kiểu cũ với nhiều tham số.

Đây là một ví dụ với một vài tham số:

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

Lúc mới vào công ty mình đã thay đổi mã bằng cách xóa mã
giữa dấu ngoặc tròn và thay thế ; qua ,:

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

Điều tôi không biết lúc đó là các tham số có thể được hoán đổi như thế này:

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

Ở đây cách hiệu chỉnh của tôi sẽ hoán đổi x và y, điều này rất tai hại.

Tôi phát hiện ra điều này sau đó vì chương trình cho thấy hành vi không xác định gây ra
bởi một trong những thay đổi của tôi.

Nhưng trước đây tôi đã thay đổi hàng trăm hàm với tối đa 20 tham số.

Vì vậy, thứ tôi cần bây giờ là một trình phân tích cú pháp, phân tích tất cả mã mà không cần sửa đổi, tìm các định nghĩa và báo cáo hàm kiểu cũ
các thông số hoán đổi.

Có ai biết nếu một công cụ như vậy tồn tại? Hoặc một số mã c hoặc C++ mà tôi có thể sử dụng
làm cơ sở và sửa đổi theo nhu cầu của tôi?

Cảm ơn và anh
Cơ Đốc giáo

Những gì tôi đã thử:

Tôi bắt đầu làm nó bằng tay. 🙁

Giải pháp 1

Cách tốt nhất của bạn là loại bỏ phiên bản đã sửa đổi của bạn và hoàn nguyên về bản gốc. Sau đó, nếu bạn phải cấu trúc lại các định nghĩa, hãy viết mã để thực hiện điều đó từ phiên bản hoạt động gốc thay vì cố gắng kiểm tra thủ công từng chức năng.

Tôi không biết bất kỳ phần mềm hiện có nào có thể sửa phiên bản hiện tại của bạn, vì vậy bạn sẽ phải viết nó – và đó là công việc gấp đôi việc hoàn nguyên về một phiên bản tốt đã biết!

Giải pháp 2

Đã từng có một tiện ích được phân phối cùng với GCC có tên là protoize có thể hỗ trợ chuyển đổi các định nghĩa hàm K&R sang ANSI. Tuy nhiên, nó dường như đã ngừng hoạt động vào khoảng gcc 4, bắt đầu từ khoảng năm 2005. Có một số thông tin về các vấn đề ở đây: Bảo vệ cẩn thận[^] Nếu không có nút hiển thị nào dành cho bạn, bạn có thể trích xuất protoize từ cây nguồn và thử biên dịch nó. Ngoài ra còn có cproto : CPROTO – Tạo nguyên mẫu hàm[^] Mặc dù dự án dường như không còn tồn tại nhưng bạn vẫn có thể truy tìm mã nguồn của nó. Theo những gì tôi biết, cả cproto và protoize đều có vấn đề, vì vậy cần cẩn thận khi làm việc với cả hai.

コメント

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