C99 में पेश किए गए **कंपाउंड लिटरल्स** नामहीन ऑब्जेक्ट्स (स्ट्रक्चर, ऐरे, यूनियन) बनाने की अनुमति देते हैं जिनका उपयोग तुरंत किया जा सकता है।
सिंटैक्स
(type_name){ initializer_list }
उदाहरण: स्ट्रक्चर लिटरल
#include <stdio.h>
struct Point {
int x, y;
};
void print_point(struct Point p) {
printf("(%d, %d)\n", p.x, p.y);
}
int main() {
// कंपाउंड लिटरल के रूप में स्ट्रक्चर पास करें
print_point((struct Point){10, 20});
// वेरिएबल में असाइनमेंट
struct Point p = (struct Point){30, 40};
print_point(p);
// ऐरे कंपाउंड लिटरल
int *arr = (int[]){1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) printf("%d ", arr[i]);
return 0;
}
आउटपुट
(10, 20) (30, 40) 1 2 3 4 5
स्टोरेज ड्यूरेशन
- फाइल स्कोप: स्टेटिक स्टोरेज ड्यूरेशन (प्रोग्राम अवधि)।
- ब्लॉक स्कोप: ऑटोमैटिक स्टोरेज ड्यूरेशन (ब्लॉक एंट्री पर बनता है, एग्जिट पर नष्ट)।
उपयोग के मामले
- फंक्शन आर्गुमेंट्स के लिए अस्थायी स्ट्रक्चर/ऐरे बनाना।
- नामित वेरिएबल के बिना डेटा पास करना।
- डेजिग्नेटेड इनिशियलाइजर्स के साथ:
(struct Point){.x=10, .y=20}।
C++ नोट
C++ में कंपाउंड लिटरल्स **नहीं** हैं। C++11 से std::initializer_list और ब्रेस्ड-इनिट-लिस्ट ({1,2,3}) समान कार्यक्षमता देते हैं।