2010-08-11 18 views
19

मेरे पास नीचे परिभाषित अनुसार टेबल-अप-टेबल है और मैं जीसीसी का उपयोग कर रहा हूं। जब मैं संकलित करता हूं तो मुझेजीसीसी चेतावनी: स्केलर प्रारंभकर्ता के आसपास ब्रेसिज़

warning: braces around scalar initializer 

इस चेतावनी का क्या अर्थ है? मुझे इस LUT को कैसे प्रारंभ करना चाहिए? क्या मैं इस संरचनाओं को शुरू करने में गलती कर रहा हूं?

सहायता !! एकल मूल्यों के आसपास { और }:


typedef struct TECH 
{ 

    float velocity1, velocity2; 
    float temp; 
    float measure; 

    int id; 
    float storage[64]; 

}TECH; 

struct TECH lut_model_1[2] = {{{296.001465}, 
     {74.216972}, 
     {2.025908}, 
     {1.516384}, 
     {1}, 
     {0.001746, 
     0.000256, 0.006216, 0.005249, -0.001668, -0.001377, 0.009865, 0.010454, -0.000288, -0.005853, 0.010584, 0.015440, 0.000465, -0.000602, 0.004330, 0.005700, 0.017120, 
     0.233015, 0.034154, 0.244022, 0.007644, 0.385683, 0.042960, 0.406633, -0.007811, 0.346931, 0.040123, 0.387361, 0.007030, 0.225309, 0.017897, 0.241024, 0.003700, 
     0.103601, 0.060748, 0.121059, -0.045041, 0.076974, 0.070647, 0.148810, -0.022399, 0.074007, 0.054797, 0.141794, 0.010376, 0.052482, 0.045013, 0.078443, -0.019940, 
     -0.057353, 0.044285, 0.066622, -0.058232, -0.093817, 0.064753, 0.126611, -0.008286, -0.085634, 0.029582, 0.140443, 0.009189, -0.052974, 0.036057, 0.087536}}, 

     {{309.270569}, 
     {74.520226}, 
     {2.088673}, 
     {1.595730}, 
     {1}, 
     {-0.003261, 
     0.001452, 0.006673, 0.007092, 0.001020, 0.002904, 0.009037, 0.009587, -0.001494, 0.000296, 0.009327, 0.010013, -0.000301, -0.002727, 0.005875, 0.008888, -0.016850, 
     0.231185, 0.029758, 0.241629, 0.009411, 0.382748, 0.057553, 0.407984, -0.019496, 0.393691, 0.045355, 0.411033, -0.019787, 0.185746, 0.027101, 0.216863, 0.010189, 
     0.050463, 0.041380, 0.059462, 0.009747, 0.093188, 0.089831, 0.132579, -0.049612, 0.058789, 0.075130, 0.122026, -0.022185, 0.017041, 0.035450, 0.074255, -0.002068, 
     -0.061219, 0.040752, 0.087084, -0.013021, -0.106098, 0.066566, 0.140099, -0.041966, -0.073433, 0.055231, 0.125908, -0.003481, -0.050690, 0.017257, 0.085251}}}; 
+0

मेरे पास एक ही समस्या है, केवल मैं एक त्रुटि के साथ अटक गया हूँ। "त्रुटि: प्रकार 'फ्लोट' के लिए स्केलर प्रारंभकर्ता के आसपास ब्रेसिज़। मुझे खुशी होगी अगर मुझे यह पता चले कि इसे कैसे एक कंपाइलर चेतावनी बनाना है, क्योंकि कोड को संकलित करने की आवश्यकता है, यह संपादित करने के लिए मेरा नहीं है। – user297500

+0

@ user297500, '0.f' –

उत्तर

16

आप ब्रेसिज़ निकाल देना चाहिए।

struct TECH lut_model_1[2] = {{296.001465, 
     74.216972, 
     2.025908, 
     1.516384, 
     1, 
     {0.001746, 
     0.000256, 0.006216, 0.005249, -0.001668, -0.001377, 0.009865, 0.010454, -0.000288, -0.005853, 0.010584, 0.015440, 0.000465, -0.000602, 0.004330, 0.005700, 0.017120, 
     0.233015, 0.034154, 0.244022, 0.007644, 0.385683, 0.042960, 0.406633, -0.007811, 0.346931, 0.040123, 0.387361, 0.007030, 0.225309, 0.017897, 0.241024, 0.003700, 
     0.103601, 0.060748, 0.121059, -0.045041, 0.076974, 0.070647, 0.148810, -0.022399, 0.074007, 0.054797, 0.141794, 0.010376, 0.052482, 0.045013, 0.078443, -0.019940, 
     -0.057353, 0.044285, 0.066622, -0.058232, -0.093817, 0.064753, 0.126611, -0.008286, -0.085634, 0.029582, 0.140443, 0.009189, -0.052974, 0.036057, 0.087536}}, 

     {309.270569, 
     74.520226, 
     2.088673, 
     1.595730, 
     1, 
     {-0.003261, 
     0.001452, 0.006673, 0.007092, 0.001020, 0.002904, 0.009037, 0.009587, -0.001494, 0.000296, 0.009327, 0.010013, -0.000301, -0.002727, 0.005875, 0.008888, -0.016850, 
     0.231185, 0.029758, 0.241629, 0.009411, 0.382748, 0.057553, 0.407984, -0.019496, 0.393691, 0.045355, 0.411033, -0.019787, 0.185746, 0.027101, 0.216863, 0.010189, 
     0.050463, 0.041380, 0.059462, 0.009747, 0.093188, 0.089831, 0.132579, -0.049612, 0.058789, 0.075130, 0.122026, -0.022185, 0.017041, 0.035450, 0.074255, -0.002068, 
     -0.061219, 0.040752, 0.087084, -0.013021, -0.106098, 0.066566, 0.140099, -0.041966, -0.073433, 0.055231, 0.125908, -0.003481, -0.050690, 0.017257, 0.085251}}}; 

कोई चेतावनी नहीं देगा।

3

इसका मतलब है आप जैसे स्थानों में ब्रेसिज़ नहीं डाल की जरूरत है:

{74.216972}, 
मूल रूप से

, सभी ब्रेसिज़ आप वैकल्पिक (बाहरी लोगों को छोड़कर) देखते हैं, तथापि, आप एक अलग चेतावनी के लिए नहीं मिलेगा प्रारंभकर्ता में नेस्टेड structs गले लगाओ। असल में, यदि आप चेतावनी को ध्यान में रखते हैं, तो केवल नेस्टेड structs और सरणी के आसपास ब्रेसिज़ डालें; यदि नहीं, तो पठनीयता को बेहतर बनाने के लिए उनका उपयोग करें।

2

आप ब्रेसिज़ के साथ उनके आस-पास स्केलर मान (वेग 1, temp, आदि) प्रारंभ करते हैं, जिसकी आवश्यकता नहीं है।

इस प्रयास करें:

struct TECH lut_model_1[2] = {{296.001465, 
     74.216972, 
     2.025908, 
     1.516384, 
     1, 
     {0.001746, 
     0.000256, 0.006216, 0.005249, -0.001668, -0.001377, 0.009865, 0.010454, -0.000288, -0.005853, 0.010584, 0.015440, 0.000465, -0.000602, 0.004330, 0.005700, 0.017120, 
     0.233015, 0.034154, 0.244022, 0.007644, 0.385683, 0.042960, 0.406633, -0.007811, 0.346931, 0.040123, 0.387361, 0.007030, 0.225309, 0.017897, 0.241024, 0.003700, 
     0.103601, 0.060748, 0.121059, -0.045041, 0.076974, 0.070647, 0.148810, -0.022399, 0.074007, 0.054797, 0.141794, 0.010376, 0.052482, 0.045013, 0.078443, -0.019940, 
     -0.057353, 0.044285, 0.066622, -0.058232, -0.093817, 0.064753, 0.126611, -0.008286, -0.085634, 0.029582, 0.140443, 0.009189, -0.052974, 0.036057, 0.087536}}, 

     {309.270569, 
     74.520226, 
     2.088673, 
     1.595730, 
     1, 
     {-0.003261, 
     0.001452, 0.006673, 0.007092, 0.001020, 0.002904, 0.009037, 0.009587, -0.001494, 0.000296, 0.009327, 0.010013, -0.000301, -0.002727, 0.005875, 0.008888, -0.016850, 
     0.231185, 0.029758, 0.241629, 0.009411, 0.382748, 0.057553, 0.407984, -0.019496, 0.393691, 0.045355, 0.411033, -0.019787, 0.185746, 0.027101, 0.216863, 0.010189, 
     0.050463, 0.041380, 0.059462, 0.009747, 0.093188, 0.089831, 0.132579, -0.049612, 0.058789, 0.075130, 0.122026, -0.022185, 0.017041, 0.035450, 0.074255, -0.002068, 
     -0.061219, 0.040752, 0.087084, -0.013021, -0.106098, 0.066566, 0.140099, -0.041966, -0.073433, 0.055231, 0.125908, -0.003481, -0.050690, 0.017257, 0.085251}}}; 
5

यह एक अदिश प्रारंभकर्ता है: int foo = {3};
यह एक सरणी है, जो अदिश नहीं है की एक प्रारंभकर्ता है: int foo = 3;
यह उसके चारों ओर ब्रेसिज़ वाले स्केलर प्रारंभकर्ता है: int foo[] = {1, 2, 3};

चेतावनी का कहना है कि अपने struct उनके आसपास कोष्ठक अदिश initializers है:

typedef struct TECH 
{ 

    float velocity1, velocity2; 
... 

struct TECH lut_model_1[2] = {{{296.001465}, 
    {74.216972}, 
... 

आपका कोड काम करेगा, इसमें केवल अपने स्केलर प्रारंभकर्ताओं के आस-पास अनावश्यक ब्रेसिज़ हैं। यदि आप ब्रेसिज़ लेते हैं और इसे थोड़ा और अच्छी तरह से प्रारूपित करते हैं (मैं अपनी शुरुआत में पहला प्रारंभकर्ता डालता हूं) इसके बारे में कुछ भी आपत्तिजनक नहीं होगा।

16

सी भाषा में यह पूरी तरह से जब

int x = { 5 }; 

में एक अदिश मूल्य आरंभ, के रूप में अतिरिक्त ब्रेसिज़ उपयोग करने के लिए भले ही आप सामान्य रूप से वास्तविक जीवन कोड में यह नहीं देखेंगे कानूनी है। आपके मामले में आप एक ही काम कर रहे हैं, सिवाय इसके कि आपके मामले में स्केलर मान एक बड़े कुल का सदस्य है।

जीसीसी इस तरह के कोड के लिए चेतावनियां उत्पन्न करता है। यह मानता है कि यह संभव है कि आपने कुछ लिखा है जिसे आप लिखने का इरादा नहीं रखते थे, क्योंकि ब्रेसिज़ का अधिकांश समय एक कुल मिलाकर एक बहु-प्रारंभिक प्रारंभकर्ता शुरू करने के लिए किया जाता है, न कि स्केलर के लिए एक स्टैंडअलोन प्रारंभकर्ता।

<rant> जीसीसी निश्चित रूप से कुल प्रारंभकर्ताओं में ब्रेसिज़ के बारे में अपनी चेतावनियों के साथ चीजों को खराब कर रहा है। सी भाषा में { 0 } हमेशा एक मूर्खतापूर्ण सार्वभौमिक शून्य-प्रारंभकर्ता के रूप में उपयोग किया गया है।कम से कम { 0 } को अपने बेवकूफ मूल्य के लिए ब्रेस से संबंधित चेतावनियों से मुक्त किया जाना चाहिए था। </rant>

+0

के साथ आरंभ करें क्या इसका मतलब यह है कि' {0} 'भी एक कुल के लिए एक पूर्ण कानूनी प्रारंभकर्ता होना चाहिए जिसका पहला सदस्य एक और कुल है? – jamesdlin

+2

@jamesdlin: हाँ। प्रत्येक नेस्टेड कुल के लिए '{}' का एक समर्पित स्तर खोलने की आवश्यकता नहीं है। जीसीसी हालांकि एक चेतावनी जारी करेगा - एक और जगह जहां उन्होंने '{0}' मुहावरे को चेतावनी देने वाली चेतावनियों को तोड़ने में कामयाब रहे। – AnT

+0

यह मुझे भी परेशान करता है। मैं उन परिस्थितियों के भार के लिए चेतावनियां प्राप्त करता रहता हूं जहां मैं संरचना को '= {0} के साथ शून्य में प्रारंभ करना चाहता हूं; और यह moans। उन्हें '= {0}; 'के लिए एक विशेष मामला बनाना चाहिए और चेतावनियों को कम करना चाहिए। –

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