यह एक आसान सवाल होगा लेकिन आस-पास घूमने से मुझे जवाब नहीं मिल रहा है। जिस तरह से मैं इसे सी में समझता हूं, हमारे पास foo ऑब्जेक्ट को प्रारंभ करने के दो तरीके होते हैं, जब foo एक संरचना है। उदाहरण के लिए नीचे दिए गए कोड को देखेंसी संरचनाओं को शुरू करते समय शब्दावली
typedef struct foo
{
int var1;
int var2;
char* var3;
}foo;
//initializes and allocates a foo
foo* foo_init1(int v1,int v2,const char* v3)
{
if(..some checks..)
return 0;
foo* ret = malloc(sizeof(foo));
ret->var1 = v1;
ret->var2 = v2;
ret-var3 = malloc(strlen(v3)+1);
strcpy(ret->var3,v3);
return ret;
}
// initializes foo by ... what? How do we call this method of initialization?
char foo_init2(foo* ret,int v1,int v2, const char* v3)
{
//do some checks and return false
if(...some checks..)
return false//;assume you defined true and false in a header file as 1 and 0 respectively
ret->var1 = v1;
ret->var1 = v1;
ret->var2 = v2;
ret-var3 = malloc(strlen(v3)+1);
strcpy(ret->var3,v3);
return true;
}
तो मेरा प्रश्न यह है। हम सी को इन विभिन्न प्रारंभिक तरीकों से कैसे संदर्भित करते हैं? पहले एक initialized सूचक तो foo के लिए अगर आप इस तरह के ढेर पर एक foo वस्तु चाहते हैं उपयोग करने के लिए आसान है रिटर्न:
foo* f1 = foo_init1(10,20,"hello");
लेकिन दूसरे एक foo की आवश्यकता है .. क्या? नीचे दिए गए कोड को देखें।
foo f1;
foo_init2(&f1,10,20,"hello");
तो दूसरी विधि स्टैक पर किसी ऑब्जेक्ट को प्रारंभ करना आसान बनाता है लेकिन आप इसे कैसे कॉल करते हैं? यह मूल रूप से मेरा प्रश्न है, प्रारंभिकरण की दूसरी विधि को कैसे संदर्भित किया जाए।
पहले एक आवंटित और फू के लिए सूचक initializes। दूसरा दूसरा एक foo शुरू करता है ... क्या? संदर्भ?
बोनस प्रश्न के रूप में, सी में कोडिंग करते समय आप लोग कैसे काम करते हैं? क्या आप उस ऑब्जेक्ट का उपयोग निर्धारित करते हैं जो आप बना रहे हैं और यह निर्धारित करते हैं कि क्या आपके पास टाइप 1, या 2 या यहां तक कि दोनों का प्रारंभिक कार्य होना चाहिए?
मैं उन लोगों के लिए उन्हें '_new' कहता हूं जो आवंटित नहीं करते हैं और' _init' जो नहीं करते हैं। साथ ही, अपने कोड को बनाए रखने के लिए आंतरिक रूप से '_new' कॉल' _init 'है। (कभी-कभी मैं इसे '_new' के बजाय '_make' कहता हूं।) –
हे क्रिस जिस तरह से आप उन्हें बुलाते हैं उस पर अच्छी अंतर्दृष्टि। आप इसे एक उत्तर क्यों नहीं देते हैं ताकि मैं इसे वोट दे सकूं और संभावित एसओ उपयोगकर्ता भी जिनके पास एक ही प्रश्न हो, इसे देख सकें? भी ... क्या लोगों के संदर्भ में उनके लिए कोई मानक तरीका नहीं है? मैं चाहता हूं कि कोई व्यक्ति मेरे कोड को देख रहा हो (क्योंकि यह एक एपीआई है) तुरंत फंक्शन नाम – Lefteris
@ChrisLutz द्वारा अलग-अलग उपयोग को समझने के लिए: बस स्पष्ट होने के लिए, आप टाइप नाम पर '_new',' _init' जोड़ते हैं, दाएं (' foo_new', 'foo_init')? अन्यथा आप पहचानकर्ताओं के साथ टकराव करेंगे जो कार्यान्वयन के लिए आरक्षित हैं। (मुझे यकीन है कि आप यह जानते हैं; अन्य शायद नहीं।) –