नीचे संरचना की परिभाषा पर, मैक्रो परिभाषा (#define
) वाली एक पंक्ति है। वह रेखा वास्तव में क्या करती है? मैं समझता हूं कि यह सरणी h_addr_list
की पहली प्रविष्टि के लिए उपनाम बनाता है, लेकिन यह अभी भी मेरे लिए अजीब लग रहा है। h_addr
संरचना hostent
का सदस्य है? क्या यह परिभाषा केवल संरचना के दायरे में है?स्ट्रक्चर परिभाषा के अंदर मैक्रो को परिभाषित करना
struct hostent
{
char *h_name; /* official name of host */
char **h_aliases; /* alias list */
int h_addrtype; /* host address type */
int h_length; /* length of address */
char **h_addr_list; /* list of addresses from name server */
#define h_addr h_addr_list[0] /* address, for backward compatiblity */
};
मैं आपकी प्रतिक्रिया केवल आंशिक रूप से समझता हूं। उदाहरण के लिए, 'h_addr' तब' स्ट्रक्चर होस्टेंट 'का सदस्य क्यों होता है जब यह केवल एक मैक्रो होता है? – pap42
'h_addr' 'संरचना होस्टेंट' का क्षेत्र नहीं है। उस परिभाषा को प्री-प्रोसेसर द्वारा संसाधित किया जाता है, वास्तविक कंपाइलर एक खाली रेखा देखता है जहां '# परिभाषित' होता है। लेकिन अगर कोड का एक टुकड़ा 'he.h_addr' के रूप में लिखा गया है, तो प्री-प्रोसेसर इसे संशोधित करेगा और इसे' he.h_addr_list [0] 'से बदल देगा। यही वास्तविक संकलक देखेंगे। – Mat
आपकी प्रतिक्रिया उत्कृष्ट है, लेकिन मुझे लगता है कि आपको इसे भविष्य के पाठकों के लिए थोड़ा और स्पष्ट बनाने के लिए संपादित करना चाहिए (शायद आपने जो टिप्पणी अभी बनाई है?)। – pap42