2011-11-20 19 views
14

पर आधारित सी फ़ाइल में रीडर फ़ंक्शन .h पर आधारित .c फ़ाइल को स्वचालित रूप से पुन: व्यवस्थित करने के लिए कोई उपकरण है?सी हेडर फ़ाइल

उदाहरण के लिए, foo.h

void function1(); 
void function2(); 
void function3(); 

और foo.c

void function2(){} 
void function1(){} 
void function3(){} 

मैं के रूप में

void function1(){} 
void function2(){} 
void function3(){} 

यह क्रम बदल सकते हैं वैसे, मैं Ubuntu में विम उपयोग कर रहा हूँ।

+1

दिलचस्प। वीआईएम बहुत सारी चीज़ें कर सकता है (मैंने एक "भूलभुलैया हल करें" उदाहरण देखा)। आप इसके लिए एक बड़ी लिपि लिखना समाप्त कर सकते हैं। हालांकि कुछ मुझे बताता है कि आप मैक्रोज़ के साथ ऐसा करने में सक्षम होना चाहिए। – Shahbaz

+1

उदाहरण के लिए, एक मैक्रो जो फ़ंक्शन की प्रतिलिपि बनाता है वह आसान है। आप फ़ंक्शन की शुरुआत में शुरू करते हैं, दृश्य शुरू करते हैं, ('' '' के लिए खोज करते हैं, '''' दबाएं, फिर '%', फिर 'd'। अब आपके पास फंक्शन काट है। अब आपको इसकी उचित जगह ढूंढनी है और इसे सम्मिलित करना है ... मुझे आश्चर्य है ... – Shahbaz

+0

आपके लिए एक अच्छा सी प्रोग्रामिंग प्रोजेक्ट जैसा लगता है। –

उत्तर

2

मुझे विश्वास नहीं है कि ऐसा उपकरण है। सी में, घोषणा और परिभाषा का आदेश आम तौर पर कोई फर्क नहीं पड़ता। निश्चित रूप से एक निर्भरता पाश का अपवाद है (a() कॉल b() जो a() पर कॉल करता है), लेकिन जब हेडर फ़ाइल में फ़ंक्शन घोषित किए जाते हैं, तब भी यह कोई समस्या नहीं है, क्योंकि सभी घोषणाएं प्रभावी रूप से "आगे" घोषणाओं को संभालने के लिए आवश्यक हैं निर्भरता loops।

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

कोड के तर्क, व्याकरण या पठनीयता को तोड़ने का जोखिम भी होता है जब इसे स्वचालित रूप से पुनर्गठित किया जाता है। उदाहरण के लिए, यदि फ़ंक्शन परिभाषाओं के बीच टिप्पणियां झूठ बोलती हैं, तो टूल को कैसे पता चलेगा कि कोई टिप्पणी किसी विशेष फ़ंक्शन, या फ़ंक्शंस के समूह के साथ या उपरोक्त फ़ंक्शन के साथ जाती है या नहीं? और जैसा कि @Yuri ऊपर उल्लेखित है, # if/# else/# endif ब्लॉक के अंदर फ़ंक्शंस के बारे में क्या है? और मैक्रोज़ जैसे सूक्ष्म मामलों के बारे में क्या है जो फ़ंक्शन परिभाषाओं के बीच सैंडविच किए गए कार्यों या # अंतर्निहित निर्देशों को शामिल करते हैं? मुझे लगता है कि एक रिकॉर्डिंग सुविधा अपने डोमेन को एक साधारण मामले तक सीमित कर सकती है, लेकिन अगर मामला बहुत आसान हो जाता है, तो इसकी अपील संगत रूप से सीमित होती है, और इसे सार्वजनिक रूप से या व्यापक रूप से जारी नहीं किया जाता है।

यह सब कहा जा रहा है, मुझे लगता है कि आपके निपटारे में एक समृद्ध टूलसेट के साथ, ऐसी सुविधा लागू करने में बहुत मुश्किल नहीं होगी, हालांकि अगर मैं इसे कर रहा था, तो मुझे उम्मीद है कि पहली अप्रत्याशित कठिनाई में, मैं खुद को ढूंढूंगा यह सोचकर कि क्या स्रोत फ़ाइलों को हाथ से संपादित करना आसान नहीं होगा। मल्टीलाइन काट और पेस्ट बहुत आसान है, सब के बाद।

+3

हम्म। ऐसा लगता है कि "मुझे पता नहीं है" के लिए बहुत सारे पाठ की तरह लगता है। :) –

संबंधित मुद्दे