2010-08-27 48 views
5

में पूर्णांक प्रारंभ करते समय अभिव्यक्ति वाक्यविन्यास त्रुटि कहता है जबकि प्रोग्रामिंग मैं एक असामान्य त्रुटि में आया हूं। जब मैं लूप में एक पूर्णांक प्रारंभ करता हूं, कभी-कभी यह कहता है कि अभिव्यक्ति मान्य नहीं है, लेकिन कभी-कभी यह इसे स्वीकार करती है। C99 से पहले, आप अपने पाश से पहले अपने चर घोषित करने के लिए की जरूरत हैलूप के लिए लूप

int pow(int x,int n) 
{ 
    int i; 
    for(i=1;i<n;i++) 
    x=x*i; 
    return x; 
} 

उत्तर

8

C89 और पिछले संस्करणों केवल एक ब्लॉक के सिर पर घोषणा बयान का समर्थन (IOW, केवल बात यह है कि एक उद्घाटन { और एक घोषणा के बीच दिखाई दे सकता है एक और घोषणा है):

/* C89 and earlier */ 
int main(void) 
{ 
    int x;      /* this is legal */ 
    ... 
    for (x = 0; x < 10; x++) 
    { 
    int i;     /* so is this */ 
    printf("x = %d\n", x); 
    int j = 2*x;    /* ILLEGAL */ 
    } 
    int y;      /* ILLEGAL */ 
    ... 
} 
C99 के साथ

, घोषणा बयान, काफी कहीं भी प्रकट हो सकते हैं नियंत्रण भाव (चेतावनी के साथ कि इससे पहले कि यह प्रयोग किया जाता है कुछ घोषित किया जाना चाहिए) सहित:

// C99 and later, C++ 
int main(void) 
{ 
    int x;      // same as before 
    ... 
    for (int i = 0; i < 10; i++) // supported as of C99 
    { 
    printf("i = %d\n", i); 
    int j = 2 * i;    // supported as of C99 
    } 
    int y;      // supported as of C99 
} 

टर्बो सी C99 मानक पहले का है, इसलिए यदि आप में की तरह कोड लिखना चाहते हैं दूसरा उदाहरण, आपको एक अधिक अद्यतित कंपाइलर का उपयोग करने की आवश्यकता होगी।

+0

Thanx.Really मदद की –

9

सी में:

int pow(int x,int n); 
int main() 
{ 
    int x,n,result; 
    printf("Enter a number:\n"); 
    scanf("%d",&x); 
    printf("Enter its power:\n"); 
    scanf("%d",&n); 
    result=pow(x,n); 
    printf("Result is %d\n",result); 
    getch(); 
    return 0; 
} 
int pow(int x,int n) 
{ 
    for(int i=1;i<n;i++) //<-- here it says that declaration syntax error 
    x=x*i; 
    return x; 
} 

जबकि जब मैं इसे इस तरह बदलने के लिए: यह मेरा कोड है जो त्रुटि देता है। सी ++ में, और अब सी 99 में, आप उन्हें यहां लूप के रूप में घोषित कर सकते हैं। आपके द्वारा प्राप्त किए जा रहे विभिन्न परिणाम हो सकते हैं क्योंकि आप कभी-कभी सी ++ के रूप में संकलित होते हैं, और कभी-कभी सी

आप यह सुनिश्चित करने का प्रयास कर सकते हैं कि आप हमेशा अपने कोड को C++ के रूप में संकलित कर रहे हैं, या यदि आप जीसीसी या क्लैंग का उपयोग कर रहे हैं , --std=c99 ध्वज के साथ संकलित करें। सी 99 एमएसवीसी द्वारा असमर्थित है, इसलिए यदि आप एमएसवीसी का उपयोग कर रहे हैं तो आपको या तो सी ++ का उपयोग करने या लूप के बाहर घोषणा को स्थानांतरित करने की आवश्यकता होगी।

+0

मैं एक टर्बो सी संकलक –

+0

@fahad क्षमा उपयोग करते हैं, मैं टर्बो सी की बारीकियों मैंने कहा है, यदि आप काम करने के लिए पहले उदाहरण चाहते हैं, ++ आप सी के लिए सेट सुनिश्चित कर लें या C99 मोड के साथ आप मदद नहीं कर सकता (शायद सी ++, मुझे नहीं लगता कि टर्बो सी सी 99 का समर्थन करता है)। –

+1

बहुत बहुत धन्यवाद :) मुझे इसके लिए मिंग जीडब्ल्यू मिलेगा। –

2

आप किस सी कंपाइलर का उपयोग कर रहे हैं?

सी 99 से पहले सी के पुराने संस्करणों को कोड ब्लॉक के शीर्ष पर सभी परिवर्तनीय घोषणाओं की आवश्यकता होती है।

+0

टर्बो सी कंपाइलर –

+0

टर्बो सी का कौन सा संस्करण? अगर मुझे भारत में कॉलेज से कुछ याद है, तो यह है कि हमारे पास टर्बो सी और बोर्लैंड सी कंपाइलर्स प्रोफेसरों की तुलना में पुराने थे। संभावना है कि आप एक ही मुद्दे का सामना कर रहे हैं। – bluesmoon

+0

बोर्लैंड टर्बो सी की आखिरी रिलीज 1 9 8 9 में थी (बीस साल पहले!)। यह समझाएगा कि यह क्यों बनाया गया था इसके एक दशक बाद स्थापित सुविधाओं का समर्थन नहीं करता है। मैं दृढ़ता से सुझाव देता हूं कि आपको कई कारणों से एक नया कंपाइलर मिल जाए। मिनीजीडब्ल्यू जीसीसी पर आधारित विंडोज़ के लिए एक उत्कृष्ट, मुफ़्त, आधुनिक सी 99 कंपाइलर है। माइक्रोसॉफ्ट वीसी ++ एक्सप्रेस संस्करण भी मुफ्त और आधुनिक है, लेकिन यह सी कोड के साथ काम करते समय केवल एक सी 8 9 संकलक है। –

5

ऐसा लगता है कि आपके पास C89 कंपाइलर है (C99 कंपाइलर की बजाय)।

सी 8 9 में, आपको केवल एक फ़ंक्शन की शुरुआत में चर घोषित करने की अनुमति है। for कथन के आरंभिक भाग सहित, आपको किसी फ़ंक्शन में कहीं और चर घोषित करने की अनुमति नहीं है। यही कारण है कि दूसरा वाक्यविन्यास काम करता है और पहला विफल रहता है।

दूसरा वाक्यविन्यास सी 99 और सी ++ के लिए मान्य है लेकिन सी 8 9 के लिए नहीं है।

+0

लेकिन कई बार यह काम करता है। ऐसा क्यों होता है? –

+0

क्या आप अपने प्रश्न में एक कोड स्निपेट जोड़ सकते हैं जहां आप 'for' कथन के अंदर चर घोषित करते हैं और यह काम करता है? इसके बिना गैर-वर्किंग वर्जन की तुलना करने के लिए, आपको यह बताने का कोई तरीका नहीं है कि अंतर क्या है। –

+0

यदि आप कोड देखते हैं जो मैंने किया है –