2011-10-24 9 views
10

मैं एक प्रोग्राम है जो कमांड लाइन तर्क को स्वीकार कर सकते हैं और मैं एक समारोह से, तर्क, उपयोगकर्ता द्वारा दर्ज का उपयोग करना चाहते हैं। कैसे मुझे लगता है कि कार्य करने के लिए int main(int argc, char *argv[]) से *argv[] पारित कर सकते हैं? मैं संकेत की अवधारणा के लिए नए की तरह कर रहा हूँ और मुझे मेरे हाल पर इस बाहर काम करने के लिए *argv[] थोड़ा बहुत जटिल लग रहा है।मैं मुख्य कार्य * argv [] को फ़ंक्शन में कैसे पास कर सकता हूं?

विचार है कि मैं अपने main को सभी कामों को ले जाकर जितना संभव हो उतना स्वच्छ छोड़ूं, कि मैं पुस्तकालय फ़ाइल में तर्कों के साथ करना चाहता हूं। मैं पहले से ही पता है कि मैं जब मैं main बाहर उनमें से काबू पाने के लिए प्रबंधन उन तर्कों के साथ क्या करना है। मुझे नहीं पता कि उन्हें वहां कैसे पहुंचाया जाए।

मैं जीसीसी का उपयोग कर रहा

। अग्रिम धन्यवाद।

उत्तर

23

बस एक समारोह जैसे

void parse_cmdline(int argc, char *argv[]) 
{ 
    // whatever you want 
} 

लिख सकते हैं और फोन है कि parse_cmdline(argc, argv) रूप main में । कोई जादू शामिल नहीं है।

वास्तव में, आपको argc पास करने की ज़रूरत नहीं है, क्योंकि argv के अंतिम सदस्य को शून्य सूचक होने की गारंटी है। लेकिन चूंकि आपके पास argc है, इसलिए आप इसे पास कर सकते हैं।

समारोह कार्यक्रम का नाम बारे में पता नहीं की जरूरत है, तो आप भी

parse_cmdline(argc - 1, argv + 1); 
+2

के बारे में क्या के रूप में यह कॉल करने के लिए जब argv * argv [] स्थिरांक चार के रूप में परिभाषित किया गया है तय कर सकते हैं? ओएस एक्स कैसे है, और मैं वास्तव में ऐप्पल के एबीआई को नहीं बदल सकता ... – MarcusJ

+1

@MarcusJ हाँ - एआरसी ओएसएक्स पर एक्सकोड में इसके रास्ते में आता है। मुझे उन्हें अपने ओबीजेसी ++ क्लास विधि में पास करना पड़ा जैसे 'GetParams (argc, argv)', लेकिन फिर उस कार्य को 'स्थिर std :: map getParams (int argc, कॉन्स चार ** argv) '' ** argv' नोट करें। फिर, कक्षा विधि के अंदर, मैं सामान्य रूप से 'argv' का उपयोग कर सकता था जैसे कि यह 'मुख्य' फ़ंक्शन में था। (रिटर्न परिणाम पर 'मैप' सामान इसलिए था क्योंकि मेरे फ़ंक्शन ने चर = कुंजी मैप जोड़े में चर बदल दिया। ऐसा नहीं है कि आप यह भी कर सकते हैं।) – Volomike

0

बस अपने कार्य करने के लिए argc और argv गुजरती हैं।

0
SomeResultType ParseArgs(size_t count, char** args) { 
    // parse 'em 
} 

या ...

SomeResultType ParseArgs(size_t count, char* args[]) { 
    // parse 'em 
} 

और फिर ...

int main(int size_t argc, char* argv[]) { 
    ParseArgs(argv); 
} 
संबंधित मुद्दे

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