2011-03-04 18 views
8

संभव डुप्लिकेट:
What is the proper declaration of main?सी ++ - int मुख्य (int argc, char ** argv)

हम इस main समारोह में बहस से क्या मतलब है? वे हमें क्या बताने की कोशिश कर रहे हैं?

int main(int argc, char** argv)

अद्यतन: और, इस int main(int argc, char* argv[]) के समान कोड का पूर्ववर्ती लाइन है? यदि हां, तो हम कैसे कह सकते हैं कि char** argvchar* argv[] के समान है क्योंकि वे सर बिंदु से समान नहीं दिखते हैं?

इसकी तुलना int main() से की जाती है, जिसमें कोई तर्क नहीं है?

धन्यवाद।

उत्तर

9

argc पैरामीटर निष्पादन योग्य नाम सहित निष्पादन योग्य नाम सहित निर्दिष्ट कमांड लाइन विकल्पों की संख्या है, जब निष्पादन योग्य लागू किया गया था। व्यक्तिगत कमांड लाइन विकल्प argv सरणी में पाए जाते हैं, जो NULL समाप्त हो गया है (निष्पादन योग्य आह्वान करने के लिए उपयोग किया जाने वाला नाम और पथ argv[0] में है)।

दो संस्करणों के बीच का अंतर बस है यदि आप कमांड लाइन तर्कों को पार्स करना चाहते हैं या नहीं - यदि आप उनमें रुचि नहीं रखते हैं तो आप दूसरे फॉर्म का उपयोग करके उन्हें अनदेखा कर सकते हैं।

4

Wikipedia एक अच्छा स्पष्टीकरण प्रदान करता है। पहला पैरामीटर आपको कमांड लाइन तर्कों की संख्या देता है, और दूसरा आपको वास्तविक तर्क देता है।

2

argc आपको तर्कों की संख्या देता है और argv आपको उन तर्क देता है। पहले एक अपने कार्यक्रम चलाने के लिए इस्तेमाल किया .exe के लिए पथ है, तो निम्न लोगों तर्क अपने .exe की फोन करने वाले इस तरह कमांड लाइन पर प्रदान की जाती हैं:

my.exe arg1 arg2 

जबकि

int main() {} 

सिर्फ तर्कों को अनदेखा करता है।

2

argv एक सरणी है जिसमें एप्लिकेशन को पास किए गए कमांडलाइन पैरामीटर हैं। argc आपको उस सरणी में निहित तत्वों की संख्या बताता है।

3

वे कमांड लाइन पैरामीटर का प्रतिनिधित्व करते हैं।

argc निष्पादन योग्य नाम सहित कमांड लाइन पैरामीटर की संख्या है। argv शून्य-समाप्त तारों की एक सरणी है, जहां argv[0] कमांड लाइन पैरामीटर है, और argv[i] उसके बाद ith पैरामीटर है, argv[argc-1] अंतिम वाला और argv[argc] वास्तव में अच्छी तरह से परिभाषित और एक पूर्ण सूचक है।

इस प्रकार

:

foo bar baz

कमांड लाइन पर

argc = 3, argv[0] = "foo" argv[1] = "बार" argv[2] = "baz" argv[3] = शून्य

ध्यान दें कि वहाँ होगा "ध्वज" तर्कों के लिए कोई विशेष लगाव नहीं है।

grep -i foo bar.cpp bar.h

4 तर्क, मैं उनमें से एक जा रहा है और इस पर लागू होता है, भले ही अगले पैरामीटर एक "मूल्य" ध्वज से जुड़ी थी (argc = 5 ही ग्रेप सहित) के लिए होगा।

नोट यदि आप एक वाइल्डकार्ड

grep -i foo *

यूनिक्स में किया था कम से कम, * ग्रेप में कॉल और इस प्रकार प्रत्येक फ़ाइल से मेल खाने वाला एक तर्क हो रहा था जब विस्तार किया जाएगा।

संयोग

char** argv और char* argv[]

एक ही बात करते हैं।

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

+1

मुझे लगता है कि आपका मतलब है 'argc = 3' not' argc = 2'। – trojanfoe

+0

हाँ, – CashCow

+0

सही आपका स्वागत है। – trojanfoe

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