सरल प्रश्न के लिए खेद है, लेकिन मैं छुट्टी कोर ऑडियो पर एक किताब पढ़ पर हूं, और मेरी सी या मेरे साथ उद्देश्य सी पुस्तक नहीं है ...अजीब उपयोग
क्या हैं घुमावदार ब्रेसिज़ इस चर परिभाषा में कर रहे हैं?
MyRecorder recorder = {0};
सरल प्रश्न के लिए खेद है, लेकिन मैं छुट्टी कोर ऑडियो पर एक किताब पढ़ पर हूं, और मेरी सी या मेरे साथ उद्देश्य सी पुस्तक नहीं है ...अजीब उपयोग
क्या हैं घुमावदार ब्रेसिज़ इस चर परिभाषा में कर रहे हैं?
MyRecorder recorder = {0};
यह मानते हुए कि MyRecorder
एक struct
है, इस sets every member to their respective representation of zero (0
पूर्णांकों के लिए, NULL
संकेत के लिए आदि)।
असल में यह भी तरह int
, double
, संकेत, सरणियों, नेस्टेड संरचनाओं, ..., सब कुछ आप कल्पना कर सकते अन्य सभी डेटाटाइप्स पर काम करता है (धन्यवाद इस ओर इशारा करते हुए के लिए पीएमजी के लिए!)
अद्यतन: एक उद्धरण ऊपर लिंक वेबसाइट से निकाली गई, C99 की अंतिम मसौदा का हवाला देते हुए:
[6.7.8.21] एक ब्रेस संलग्न सूची में कम initializers से वहाँ तत्वों या कुल के सदस्य हैं देखते हैं, तो [ ...] शेष कुल को उन वस्तुओं के समान रूप से प्रारंभ किया जाएगा जो में स्थिर संग्रहण अवधि है।
इसके C99 मानक के अनुसार 0
को recorder
संरचना के सभी सदस्यों आरंभ। ऐसा लगता है कि यह संरचना के हर बिट को 0
बिट्स के साथ शुरू करता है। लेकिन यह हर कंपाइलर के लिए सच नहीं है।
इस उदाहरण कोड देखें,
#include<stdio.h>
struct s {
int i;
unsigned long l;
double d;
};
int main(){
struct s es = {0};
printf("%d\n", es.i);
printf("%lu\n", es.l);
printf("%f\n", es.d);
return 0;
}
यह उत्पादन होता है।
$ ./a.out
0
0
0.000000
"रिकॉर्डर संरचना के सभी सदस्यों को 0 से शुरू करना" सी 99 मानक के आवेदन में है। "वास्तव में यह संरचना के हर बिट को 0 बिट्स के साथ शुरू करता है।" परंपरागत आर्किटेक्चर पर अभ्यास में केवल सच है, और सी 99 मानक कई बार बताता है कि यह यह नहीं कह रहा है कि यह सच है, और मानक-अनुरूप कंपेलर/लक्ष्य आर्किटेक्चर को इसे सही नहीं करना है। –
@Complicatedseebio धन्यवाद, उत्तर अपडेट किया गया। –
स्केलर का भी हो सकता है: 'MyRecorder recorder = {0};' जहां 'MyRecorder'' int 'का उपनाम है उदाहरण के लिए सी – ouah
@उह में' स्ट्रक्चर 'के नाम से जुड़ा हुआ है, मैं कहता हूं * बेहद असंभव * है कि यह एक 'int' या वास्तव में संरचना/संघ के अलावा कुछ भी है। – dasblinkenlight
MyRecorder
निम्न में से एक हो सकता है और आप वास्तव में, यह संरचना के सभी तत्वों, सिर्फ पहली initliaze नहीं है शून्य
typedef struct _MyRecorder1 {
int i;
int j;
int k;
}MyRecorder1;
typedef int MyRecorder2[3];
साथ कि के सभी तत्वों को प्रारंभ करने का प्रयास कर रहे एक। लेकिन, दूसरों को 0 से स्वचालित रूप से प्रारंभ किया जाता है क्योंकि सी मानक ऐसा करने के लिए कहता है।
यदि आप डालते हैं: MyRecorder recorder = {3};
पहला तत्व 3 हो जाएगा और *** दूसरों वेल 0.
हो मैं '{0}', *** सार्वभौमिक शून्य प्रारंभकर्ता कॉल करने के लिए पसंद करते हैं। यह हर प्रकार के लिए, यदि आवश्यक हो, तो "काम करता है"! स्याही, युगल, structs, सरणी, पॉइंटर्स, structs के लिए पॉइंटर्स, पॉइंटर्स के सरणी के साथ structs, ..., ... – pmg
pmg: एक उत्तर के रूप में पोस्ट करें! –
@pmg - आपने अपनी टिप्पणी को उत्तर के रूप में क्यों नहीं पोस्ट किया? – vikingosegundo