2015-09-22 4 views
8

की सरणी में अनियमित तत्वों का मूल्य मेरे पास 3 तत्वों की एक सरणी है। लेकिन मैं केवल उनमें से 2 शुरू करना चाहता हूं। मैंने तीसरे तत्व को खाली छोड़ दिया।सी भाषा

unsigned char array[3] = {1,2,}; 
int main(){ 
    printf("%d",array[2]); 
    return 0; 
} 

प्रिंट परिणाम 0 है। मैंने इसे आईएआर और कुछ ऑनलाइन कंपाइलर पर परीक्षण किया।

क्या तीसरे तत्व के मूल्य के लिए कोई सी नियम है? क्या कोई संकलक 0xFF द्वारा तीसरा तत्व भर रहा है? (विशेष रूप से क्रॉस कंपाइलर)

उत्तर

10

हां, सी मानक परिभाषित करता है कि इस मामले में क्या होता है। तो नहीं, इस मामले में 0xFF के साथ अंतर्निहित कोई सी मानक अनुपालन कंपाइलर नहीं होना चाहिए।

मानक की धारा 6.7.9 का कहना है:

initialisation

...

10 ... एक वस्तु स्थिर या धागा भंडारण अवधि है कि नहीं है, तो स्पष्ट रूप से प्रारंभ किया गया, फिर:

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

...

21 एक ब्रेस संलग्न सूची में कम initializers से वहाँ तत्वों या कुल के सदस्यों, वर्ण या उससे कम एक स्ट्रिंग शाब्दिक में की एक सरणी को प्रारंभ करने के लिए इस्तेमाल कर रहे हैं देखते हैं, तो से ज्ञात आकार सरणी में तत्व हैं, कुल शेष का शेष स्पष्ट रूप से उन वस्तुओं के समान प्रारंभ किया गया है जिनमें स्थैतिक संग्रहण अवधि है।

0

this पोस्ट से, ऐसा प्रतीत होता है कि वाक्यविन्यास सभी तत्वों को अल्पविराम के बाद शून्य में प्रारंभ करेगा। इसके अलावा, कार्यक्रम के डेटा सेगमेंट में सभी अनियमित डेटा (दूसरे शब्दों में सभी अनियमित वैश्विक चर) स्वचालित रूप से शून्य पर सेट हो जाते हैं, इसलिए यदि आप इस कार्यक्रम में अपरिभाषित व्यवहार की तलाश में हैं, तो कोई भी नहीं है; यह हमेशा 0

0

यह जीसीसी विस्तार के साथ हस्ताक्षरित चार सरणी [10] = {1,2, [2 ... 9] = 0xFF} के रूप में प्राप्त किया जा सकता है;

+2

यह वास्तव में प्रश्न का उत्तर नहीं देता है। ओपी जानना चाहता था कि क्या नियम है कि किस मूल्य के साथ अनिर्दिष्ट इंडेक्स शुरू किए गए हैं (वहां है) और क्या कोई कंपाइलर उन्हें 0xFF तक शुरू कर देगा (कोई मानक अनुपालन संकलक ऐसा नहीं करेगा)। –

संबंधित मुद्दे