[ad_1]
أهلاً،
أنا أعمل منذ 6 سنوات مع برنامج قديم ضخم.
يحتوي برنامج SW هذا على آلاف وظائف c ذات النمط القديم مع العديد من المعلمات.
هنا مثال مع عدد قليل من المعلمات:
old_function (x,y,z) int x; int y; int z; { // some code return (0); }
عندما بدأت العمل في الشركة، قمت بتغيير الرمز عن طريق إزالة الرمز
بين الأقواس المستديرة والاستبدال ؛ بواسطة ،:
old_function (int x, int y, int z) { // some code return (0); }
ما لم أكن أعرفه في ذلك الوقت هو أنه يمكن تبديل المعلمات على النحو التالي:
old_function (x,y,z) int y; int x; int z; { // some code return (0); }
هنا، طريقتي في التصحيح ستستبدل x وy، وهو أمر قاتل.
اكتشفت ذلك لاحقًا، لأن البرنامج أظهر سلوكًا غير محدد تسبب فيه
من خلال أحد التغييرات.
لكنني قمت بالفعل بتغيير مئات الوظائف بما يصل إلى 20 معلمة من قبل.
لذا فإن ما أحتاجه الآن هو محلل، والذي يقوم بتحليل جميع التعليمات البرمجية دون تعديلاتي، ويجد تعريفات وتقارير وظائف النمط القديم
المعلمات المتبادلة
هل يعرف أحد ما إذا كانت هذه الأداة موجودة؟ أو بعض أكواد c أو C++ التي يمكنني استخدامها
كقاعدة وتعديلها حسب احتياجاتي؟
شكرا ور
مسيحي
ما حاولت:
لقد بدأت في القيام بذلك باليد. 🙁
الحل 1
أفضل رهان لك هو إلغاء النسخة المنقحة والعودة إلى النسخة الأصلية. ثم إذا كان عليك إعادة صياغة التعريفات، فاكتب التعليمات البرمجية للقيام بذلك من النسخة الأصلية العاملة بدلاً من محاولة التحقق يدويًا من كل وظيفة.
لست على علم بوجود أي برنامج موجود من شأنه تصحيح الإصدار الحالي لديك، لذا سيتعين عليك كتابته – وهذا يمثل ضعف عمل العودة إلى إصدار جيد معروف!
الحل 2
كانت هناك أداة مساعدة موزعة مع دول مجلس التعاون الخليجي تسمى protoize والتي يمكن أن تساعد في تحويل تعريفات وظائف K&R إلى ANSI. ومع ذلك، يبدو أنه قد تم إيقافه في وقت قريب من إصدار gcc 4، والذي يعود إلى حوالي عام 2005. توجد بعض المعلومات حول المشكلات هنا: تحذيرات بروتويز[^] إذا لم يكن هناك توقفات عرض لك، فقد تتمكن من استخراج النموذج الأولي من الشجرة المصدر، ومحاولة تجميعه. هناك أيضًا cproto : CPROTO – إنشاء نماذج أولية للوظائف[^] على الرغم من أن المشروع يبدو ميتًا، فقد تتمكن من تتبع الكود المصدري له. على حد علمي، يواجه كل من cproto وprotoize مشكلات، لذا يلزم بعض الحذر عند العمل مع أي منهما.
[ad_2]
コメント