पुरानी शैली सी फ़ंक्शन परिभाषाओं के लिए कनवर्टर


नमस्ते,

मैं एक विशाल लीगेसी सॉफ़्टवेयर के साथ 6 वर्षों से काम कर रहा हूँ।
इस SW में कई मापदंडों के साथ हजारों पुरानी शैली के सी फ़ंक्शन शामिल हैं।

यहां कुछ मापदंडों के साथ एक उदाहरण दिया गया है:

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 पैरामीटर तक सैकड़ों फ़ंक्शन बदल दिए हैं।

तो अब मुझे एक पार्सर की आवश्यकता है, जो मेरे संशोधनों के बिना सभी कोड को पार्स करता है, पुरानी शैली फ़ंक्शन परिभाषाओं और रिपोर्टों को ढूंढता है
मापदंडों की अदला-बदली की गई।

क्या किसी को पता है कि ऐसा कोई उपकरण मौजूद है? या कुछ सी या सी++ कोड जिसका मैं उपयोग कर सकता हूं
आधार के रूप में और मेरी आवश्यकताओं के अनुसार संशोधित करें?

धन्यवाद और भाई
ईसाई

मैंने क्या प्रयास किया है:

मैंने इसे हाथ से करना शुरू कर दिया। 🙁

समाधान 1

आपका सबसे अच्छा दांव अपने संशोधित संस्करण को रद्द करना और मूल पर वापस लौटना है। फिर यदि आपको परिभाषाओं को दोबारा जांचना है तो प्रत्येक फ़ंक्शन को मैन्युअल रूप से जांचने का प्रयास करने के बजाय मूल, कार्यशील संस्करण से ऐसा करने के लिए कोड लिखें।

मुझे ऐसे किसी मौजूदा सॉफ़्टवेयर के बारे में जानकारी नहीं है जो आपके वर्तमान संस्करण को सही कर सके, इसलिए आपको इसे लिखना होगा – और यह किसी ज्ञात अच्छे संस्करण पर वापस लौटने का दोगुना काम है!

समाधान 2

जीसीसी के साथ वितरित एक उपयोगिता हुआ करती थी जिसे प्रोटोइज़ कहा जाता था जो K&R फ़ंक्शन परिभाषाओं को ANSI में परिवर्तित करने में सहायता कर सकती थी। हालाँकि, ऐसा लगता है कि इसे जीसीसी 4 के आसपास बंद कर दिया गया था, जो लगभग 2005 में चला गया। मुद्दों के बारे में कुछ जानकारी यहाँ दी गई है: प्रोटोइज़ चेतावनियाँ[^] यदि आपके लिए कोई शो स्टॉपर नहीं है, तो आप स्रोत ट्री से प्रोटोइज़ निकालने में सक्षम हो सकते हैं, और इसे संकलित करने का प्रयास कर सकते हैं। इसमें cproto भी है: CPROTO – फ़ंक्शन प्रोटोटाइप उत्पन्न करें[^] हालाँकि यह परियोजना निष्क्रिय प्रतीत होती है, आप इसके लिए स्रोत कोड का पता लगाने में सक्षम हो सकते हैं। जहां तक ​​मुझे पता है, सीप्रोटो और प्रोटोइज़ दोनों में समस्याएं हैं, इसलिए दोनों के साथ काम करते समय कुछ सावधानी बरतने की ज़रूरत है।

コメント

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