क्या स्वयं के लिए टाइपिफ का कोई प्रभाव पड़ता है?

मैं कुछ सी ++ कोड में आया हूं जिसमें निम्न है:

typedef Request Request;

क्या यह सिर्फ एक नो-ऑप है या क्या इस टाइपपीफ का असर असर पड़ता है, और यदि हां, तो इसका क्या प्रभाव है?

0
जोड़ा संपादित
विचारों: 1
यह कुछ कर सकता है यदि अनुरोध एक मैक्रो थे।
जोड़ा लेखक Mankarse, स्रोत
हां, यह वास्तव में typedef अनुरोध अनुरोध है, और अनुरोध पहले परिभाषित किया गया है, लेकिन यह सुनिश्चित नहीं है कि यह एक ही नामस्थान है या नहीं।
जोड़ा लेखक WilliamKF, स्रोत
क्या आप वाकई typedef struct अनुरोध अनुरोध नहीं थे?
जोड़ा लेखक Graham Borland, स्रोत
एक ही नेमस्पेस में परिभाषित अनुरोध था?
जोड़ा लेखक K-ballo, स्रोत

2 उत्तर

आप धारा 7.1.3 में सी ++ 2003 एएनएसआई आईएसओ आईईसी 14882 2003 के लिए typedef निर्दिष्टकर्ता के सापेक्ष सभी नियम पढ़ सकते हैं। 7.1.3 में, 2) यह कहा गया है कि पहचान typedef की अनुमति है यदि नाम पहले से ही किसी प्रकार से संदर्भित है।

यह कानूनी है:

typedef int Request;
typedef Request Request;//Redefines "Request" with no effect 

और यह नहीं है:

typedef Request Request;//Illegal, first "Request" doesn't name a type. 

मानक से संबंधित एक विशिष्ट उदाहरण है। सी ++ 2003, §7.1.3/2:

किसी दिए गए गैर-वर्ग के दायरे में, टाइप किए गए किसी भी प्रकार के नाम को फिर से परिभाषित करने के लिए टाइपिफ़ निर्दिष्टकर्ता का उपयोग किया जा सकता है   उस स्कोप को उस प्रकार का संदर्भित करने के लिए जिस पर यह पहले से संदर्भित है। [ उदाहरण :

typedef struct s { /* ... */ } s;
typedef int I;
typedef int I;
typedef I I;

- अंतिम उदाहरण ]

7.1.3 में, 3) यह कहा गया है कि टाइप किए गए टाइप को अन्य प्रकार के उपनाम को फिर से परिभाषित करने के लिए प्रतिबंधित है

0
जोड़ा
उनके बीच क्या अंतर है? आपकी पोस्ट पर्याप्त स्पष्ट नहीं है, क्योंकि मैं एक ही टाइपपीफ को दो बार देखता हूं, फिर भी उनमें से एक कानूनी है, अन्य नहीं है।
जोड़ा लेखक Nawaz, स्रोत
मेरे पहले ब्लॉक और मेरे दूसरे ब्लॉक के बीच का अंतर "अनुरोध" की पूर्व परिभाषा है।
जोड़ा लेखक Robᵩ, स्रोत

If Request is only passed as a parameter it seems to be a opaque pointer.
There should be a

typedef struct Request Request 

कोड में कहीं। (अपने प्रश्न पर टिप्पणियां देखें)
इसका उपयोग एपीआई को परिभाषित करने और कार्यान्वयन विवरण छुपाए जाने के लिए किया जाता है। तो आप बाद में एपीआई को बदले बिना कार्यान्वयन को बदल सकते हैं।

क्लाइंट को Acutal प्रकार के बारे में कुछ भी जानने की आवश्यकता नहीं है - यह सिर्फ एक हैंडल की तरह है।
आप जो कुछ भी करना चाहते हैं उसे एपीआई विधियों (सृजन, हटाएं, लोड, init, ...) के साथ किया जाना चाहिए आम तौर पर एपीआई के कार्यान्वयन में हैंडल <�कोड> अनुरोध कुछ और अर्थपूर्ण में डाला जाएगा। यह आमतौर पर पुराना सी में किया जाता था।

0
जोड़ा
यह सी ++ सवाल है। सी के विपरीत, सी ++ में, संरचना का नाम स्वचालित रूप से प्रकार का नाम देता है, इसलिए मुझे यकीन नहीं है कि आपके पास typedef struct अनुरोध अनुरोध कहीं भी क्यों होगा। आगे की घोषणा के रूप में struct request; होने के लिए पर्याप्त होगा। या मुझसे यहां कुछ छूट रहा है?
जोड़ा लेखक hyde, स्रोत