जहां तक मेरा बता सकते हैं कि यह एक compound literal है, यह, C99 सुविधा है यह not standard C++ है, लेकिन एक विस्तार के रूप में दोनों जीसीसी और बजना समर्थन यह:
आईएसओ C99 यौगिक शाब्दिक समर्थन करता है। एक यौगिक शाब्दिक दिखने वाला एक कलाकार की तरह दिखता है। इसका मान कास्ट में निर्दिष्ट प्रकार का एक ऑब्जेक्ट है, जिसमें प्रारंभकर्ता में निर्दिष्ट तत्व शामिल हैं; यह एक लालसा है। एक विस्तार के रूप में, जीसीसी सी 9 0 मोड में और सी ++ में यौगिक अक्षर का समर्थन करता है, हालांकि अर्थशास्त्र सी ++ में कुछ अलग है।
आमतौर पर, निर्दिष्ट प्रकार एक संरचना है। दिखाया गया है मान लेते हैं कि struct foo और संरचना घोषित किया जाता है:
structure = ((struct foo) {x + y, 'a', 0});
यह निम्न लिखित रूप के बराबर है:
struct foo {int a; char b[2];} structure;
यहाँ एक यौगिक शाब्दिक के साथ एक struct foo के निर्माण का एक उदाहरण है
{
struct foo temp = {x + y, 'a', 0};
struct
इस मामले में a
के प्रकार होगा int करने के लिए सूचक। उम्मीद है कि यह मूल रूप से सी कोड था क्योंकि जीसीसी दस्तावेज़ कहता है:
सी में, एक यौगिक शाब्दिक स्थिर या स्वचालित संग्रहण अवधि के साथ एक अज्ञात वस्तु को निर्दिष्ट करता है। सी ++ में, एक यौगिक शाब्दिक एक अस्थायी वस्तु निर्दिष्ट करता है, जो केवल पूर्ण अभिव्यक्ति के अंत तक रहता है।
और इसलिए सी ++ में पता लेना शायद एक बुरा विचार है क्योंकि ऑब्जेक्ट का जीवनकाल पूर्ण अभिव्यक्ति के अंत में खत्म हो गया है। हालांकि, यह सी ++ कोड हो सकता था जो कि अपरिभाषित व्यवहार पर निर्भर था।
यह दोनों जीसीसी और बजना -pedantic का उपयोग कर एक चेतावनी और कोई त्रुटि उत्पन्न करेगा में, उन मामलों में जहाँ सही झंडे वास्तव में एक बहुत मदद करता है का उपयोग कर में से एक है उदाहरण जीसीसी के लिए कहते हैं:
warning: ISO C++ forbids compound-literals [-Wpedantic]
auto a = &(int) { 1 };
^
error: taking address of temporary [-fpermissive]
अगर हम का उपयोग -fpermissive
जीसीसी है यह वास्तव में इस कोड को संकलित करने की अनुमति देता है। मैं आधुनिक संस्करणों में किसी भी झंडे के साथ इस कोड को बनाने के लिए झुकाव नहीं प्राप्त कर सकता हूं, हालांकि पुराने संस्करण -Wno-address-of-temporary
का उपयोग करने की अनुमति देते हैं। मुझे आश्चर्य है कि क्या जीसीसी इसे remnant of an old extension के रूप में अनुमति देता है।
नोट, प्रश्न Cryptic struct definition in C में दिलचस्प की आपकी परिभाषा के आधार पर एक बहुत ही रोचक () यौगिक अक्षर का उपयोग है।
if (setsockopt(server_connection.socket, SOL_SOCKET, SO_REUSEADDR, &(int) { 1 }, sizeof(int)) < 0) {
दोनों C99 और सी ++ में एक वैध इस्तेमाल होता है:
मतभेद is correct और this question मान लिया जाये कि मूल स्रोत तो उदाहरण में है कि कोड में इस्तेमाल होता है।
कोई संदर्भ जहां से यह है? यह [compile] (http://ideone.com/hyQcy9) स्वयं ही नहीं है ... – yizzlez
एक [कंपाउंड शाब्दिक] (http://stackoverflow.com/q/28116467/1708801) जैसा दिखता है लेकिन बिना सुनिश्चित किए अधिक संदर्भ, अधिक संभावना है कि यह सी कोड था क्योंकि इसे सी ++ में विस्तार के रूप में समर्थित किया गया है और इसका पता लेना संभवतः एक बुरा विचार होगा क्योंकि अर्थात् अलग-अलग हैं। –
@awesomeyi मुझे याद नहीं है। और Google पर कोड के लिए यह सामान्य है कि किसी भी तरह संकलित न करें –