2009-02-17 5 views
7

कई बार जब मैं अन्य कोड देख रहा हूं, तो मैं सिर्फ यह जानना चाहता हूं कि एक चर को परिभाषित किया गया है। आम तौर पर जो मैं करता हूं वह वैरिएबल के प्रकार की तलाश करता है जब तक मुझे परिभाषा नहीं मिलती, जो बहुत समय लेती है। और मुझे लगता है कि कुछ उपकरण हैं जो इस पाक स्थिति में मेरी मदद कर सकते हैं। इस कार्य में मेरी मदद करने के लिए कुछ औजारों या आदेशों में कोई सुझाव?किसी भी प्रोग्राम या चाल को एक चर की परिभाषा खोजने के लिए?

मैं एक GUI का उपयोग और एक परियोजना यह स्वचालित रूप से किया जाता है मैं एक जीयूआई के बिना यह करने के लिए एक तरह से की बात कर रहा हूँ बनाने कि पता है। मैं केवल पाठ मोड के साथ काम कर रहा हूं। मैं लिनक्स के तहत चल रहा हूं और मैं सी/सी ++ का उपयोग कर रहा हूं, लेकिन अन्य भाषाओं के लिए सुझावों का स्वागत है।

बहुत बहुत धन्यवाद।

सम्भावित समाधान

अपनी टिप्पणी में से एक में मिशेल का प्रस्ताव एक सरल एक प्रभावी समाधान फिर से चर को परिभाषित, संकलन समय में उस स्थिति में, संकलक सूचित करेंगे जहां पिछले definiton है। इस समाधान को लागू करने के लिए हमें पहले वैरिएबल के इलाके में सोचना होगा।

+0

आप कम से कम भाषा निर्दिष्ट कर सकते हैं;) – devio

+0

मैं इतनी सी ++ में हूं कि अब मेरा दिमाग केवल सोचता है कि केवल एक लैंगेज – Eduardo

+0

वैरिएबल को फिर से परिभाषित करने का तरीका समाधान नहीं है। आपके पास अलग-अलग नामस्थान हैं। उदाहरण के लिए, यदि आप "औसत" नामक एक चर की तलाश में हैं, तो आप इसे किसी विधि या फ़ंक्शन के अंदर परिभाषित कर सकते हैं, या किसी अन्य नामस्थान (उसी नाम के साथ) में और यह कोई त्रुटि नहीं है। –

उत्तर

8

संपादित: ठीक है, आप कहते हैं कि तुम सी ++ का उपयोग कर रहे। मैं अपनी प्रतिक्रिया संपादित कर रहा हूँ। मैं सी प्रीप्रोसेसर और फिर चर के लिए grep का उपयोग करेंगे। यह पहली जगह में दिखाई देगा।

cpp -I...(preprocessor options here) file.cpp | grep variable 

सी पूर्वप्रक्रमक में शामिल हो जाएगा सब कार्यक्रम का उपयोग करता है, और परिभाषा फ़ाइल में उस चर के किसी भी उपयोग से पहले हो गया है कि शामिल है। एक सही बात नहीं है, लेकिन आईडीई या एक पूर्ण भाषा विवरण/प्रबंधन उपकरण के बिना, आपके पास केवल टेक्स्ट है।

एक अन्य विकल्प ctags का उपयोग करेंगे। यह सी और सी ++ वाक्यविन्यास (दूसरों के बीच) को समझता है, और दूसरों के बीच कमांड लाइन टूल्स, एमएक्स और वीआई का उपयोग करके चर और कार्यों के लिए खोजा जा सकता है। एक IDE:

+0

के इलाके में थोड़ा पहले सोचना चाहिए, सीटीएजी के अलावा, सेमेन्टिक एक और ऐड-ऑन है जो Emacs उपयोगकर्ता जांचना चाहेंगे: http: // cedet.sourceforge.net/semantic.shtml – codelogic

+0

धन्यवाद, कोडेलोगिक। हाँ, मैंने अभी इसे खोज लिया है और इसे आज़माएं :) धन्यवाद। –

11

आप पहले से ही सबसे उपयुक्त उपकरण दिया है। यह बिल्कुल है जिस तरह से एक आईडीई एक्सेल करता है। आप क्यों एक आईडीई का उपयोग करना चाहते हैं यदि आप बिना किसी दर्दनाक विकास ढूंढ रहे हैं?

ध्यान दें कि Emacs, Vim आदि आईडीई के रूप में काम कर सकते हैं - मैं आपको केवल पाठ-स्थिति में रहने के लिए जीयूआई की दुनिया को मजबूर करने के बारे में बात नहीं कर रहा हूं, उदाहरण के लिए क्योंकि आप में SSHing रहे हैं।

(मैं वास्तव में नहीं हूँ यहाँ अशिष्ट होना करने की कोशिश कर। मैं तो बस लगता है कि आप इसके कारणों का स्पष्टीकरण के बिना स्पष्ट समाधान रियायती गए हैं।)

+0

कारण मैंने इसे छूट दी, ऐसा इसलिए है क्योंकि आम तौर पर मैं जीयूआई का उपयोग करता हूं लेकिन अब मैं केवल एसएसएचिंग मोड में एक छोटी परियोजना में काम कर रहा हूं और मैं बस कुछ सरल ढूंढ रहा हूं। तुम कठोर नहीं लग रहे थे। Thx – Eduardo

+0

उस स्थिति में मैं Emacs को आईडीई के रूप में उपयोग करूंगा। मुझे आश्चर्य होगा अगर उसके पास कहीं "परिभाषा पर जाना" नहीं था। –

+0

AFAIK, Emacs में बॉक्स से ऐसी कार्यक्षमता नहीं है, हालांकि ctags और semantic, दो ऐड-ऑन, इसे प्रदान करते हैं। – codelogic

-1

आप माइक्रोसॉफ्ट विजुअल में काम करते हैं स्टूडियो (जो मुझे लगता है कि आप सी ++ के लिए भी उपयोग कर सकते हैं, लेकिन विंडोज वर्कस्टेशन पर काम करने की आवश्यकता होगी) "परिभाषा पर जाएं ..." के लिए आसानी से सुलभ राइट-क्लिक मेनू विकल्प है, जो आपको किसी की परिभाषा में ले जाएगा वर्तमान में चिह्नित चर, प्रकार या विधि।

+0

प्रश्न में मैं कोई GUI निर्दिष्ट नहीं करता क्योंकि मैं टेक्स्ट मोड – Eduardo

+0

में काम कर रहा हूं इसका उल्लेख नहीं है कि आपने एक शब्द छोड़ा है: शायद। मुझे कम से कम भरोसेमंद नहीं मिला है। कभी-कभी यह काम करता है और कभी-कभी ऐसा नहीं होता है। –

-1

अगर आप पाठ मोड रहने पर जोर देते हैं, या तो आप Emacs या उचित प्लग इन के साथ vi के साथ ऐसा कर सकते हैं।

लेकिन वास्तव में, 21 वीं शताब्दी में आगे बढ़ें।

संपादित करें: आप टिप्पणी की है कि आप SSH पर यह कर रहे हैं क्योंकि आप दूरस्थ सर्वर क्लस्टर के निर्माण की गति की जरूरत है।

उस स्थिति में, अपनी स्थानीय मशीन पर ड्राइव को माउंट करें और एक आईडीई का उपयोग करें, और केवल एक निर्माण को लात मारने के लिए एसएसएच का उपयोग करें।

+0

स्थानीय मशीन पर ड्राइव बढ़ाना कभी-कभी संभव नहीं होता है। मैं अक्सर घर से काम करता हूं और एसएसएच में रहता हूं क्योंकि हमारा सिसडमिन लोगों को बाहर से ड्राइव को घुमाने नहीं देगा। तो मैं भी emacs का उपयोग करें। – Frank

+0

क्या आप एसएसएच के माध्यम से सुरंग एक्स कनेक्शन स्थापित कर सकते हैं? –

+0

@Mr Fooz यदि आप मुझसे पूछ रहे हैं, कोई विचार नहीं है, तो भी मैं व्यवस्थापक के साथ परेशानियों में नहीं आना चाहता हूं, मेरे पास उनके साथ बहुत अच्छा संबंध नहीं है – Eduardo

1

परिवर्तनीय घोषणाओं के लिए सामान्य पैटर्न के लिए Grep। उदाहरण: *, &,> या एक अल्फान्यूमेरिक एक या अधिक सफेद जगह वर्णों के बाद चर का नाम। या परिवर्तनीय नाम शून्य या अधिक सफेद जगह वर्णों के बाद, फिर बाएं कोष्ठक या अर्धविराम। जब तक कि यह वास्तव में अजीब परिस्थितियों (जैसे किसी प्रकार के मैक्रो के साथ) के तहत परिभाषित नहीं किया गया था, यह हर बार काम करता है।

+0

हाँ सामान्य रूप से मैं ऐसा करता हूं, लेकिन मैं कुछ और "पेशेवर" – Eduardo

+0

ढूंढ रहा था, आप हमेशा चर को फिर से परिभाषित कर सकते हैं और एक संकलन त्रुटि की प्रतीक्षा कर सकते हैं ताकि आपको यह बताने के लिए कि पिछली घोषणा कहां थी। कुछ और पेशेवर शायद शायद "एक आईडीई का उपयोग करें।" – Michel

+0

यह एक अच्छी चाल है – Eduardo

5

मैं सांस्को और ctags-exuberant धार्मिक रूप से उपयोग करते हैं। इसे मेरे कोड बेस पर और फिर विम में चलाएं, मैं विभिन्न आदेशों जैसे ^] या [डी या [मैं या किसी दिए गए शब्द के लिए किसी भी परिभाषा या घोषणाओं को ढूंढने के समान उपयोग कर सकता हूं।

यह विजुअल स्टूडियो और ग्रहण जैसे मेगा-आईडीई द्वारा प्रदान की जाने वाली सुविधाओं के समान है।

सेस्कोप एक स्टैंड-अलोन टूल के रूप में भी काम करता है जो इन खोजों को निष्पादित करता है।

2

मैं तीन तरीकों में से एक का उपयोग करें:

  1. मैं CTags का उपयोग करेगा मेरे स्रोत पेड़ (रात) को संसाधित करने और फिर आसानी से परिभाषा करने के लिए सही कूद करने के विम (या अन्य संपादकों) में आदेशों का उपयोग कर सकते हैं।
  2. मैं परिवर्तनीय नाम या प्रकार की सभी घटनाओं को देखने के लिए बस grep (linux) या findstr (windows) का उपयोग करूंगा। परिभाषा आमतौर पर काफी स्पष्ट है।
  3. विम में, आप केवल दायरे में पिछड़े खोज सकते हैं और अक्सर जो खोज रहे हैं उसे ढूंढ सकते हैं।
1

विम में आप gd उपयोग कर सकते हैं स्थानीय चर घोषणाओं देखने के लिए या gD वैश्विक चर घोषणाओं को देखने के लिए, अगर वे मौजूदा फ़ाइल में परिभाषित कर रहे हैं। संदर्भ Go_to_definition_using_g

तुम भी [i का उपयोग यह करने के लिए कूद के बिना परिभाषा को देखने के लिए कर सकते हैं या [I सभी शामिल फाइलों में चर की सभी घटनाओं को देखने के लिए और साथ ही है, जो स्वाभाविक रूप से परिभाषा दिखाएगा।