2011-05-04 10 views
5

मैं दृश्य स्टूडियो 2010 में एक साधारण ANSI C उदाहरण संकलित करने के लिए कोशिश कर रहा था और इस त्रुटि संकलन के साथ भर में आया था:विज़ुअल स्टूडियो 2010 में FILE सूचक को मुख्य() क्यों घोषित करने की आवश्यकता है?

त्रुटि: patchC.c (5): त्रुटि C2275: 'फ़ाइल': इस प्रकार के अवैध उपयोग अभिव्यक्ति के रूप में

Program1:

#include <stdio.h> 

int main(void) { 
    printf("Hello world!\n"); 
    FILE *fp; 
    fp = fopen("test.txt", "r"); 
    return 0; 
} 

एक ही कार्यक्रम जीसीसी v4.5.2 में त्रुटियों के बिना संकलित करता है।

लेकिन, अगर मैं "FILE * fp" डालता हूं; मुख्य() से लाइन लाइन, प्रोग्राम गहन रूप से संकलित करें।

Program2:

#include <stdio.h> 

FILE *fp; 

int main(void) { 
    printf("Hello world!\n"); 
    fp = fopen("test.txt", "r"); 
    return 0; 
} 

मैं समझ नहीं आता कि क्यों इस व्यवहार, किसी को भी जवाब दे?

उत्तर

16

विज़ुअल सी ++ कंपाइलर केवल C90 का समर्थन करता है। सी 0 9 में, सभी स्थानीय परिवर्तनीय घोषणाएं किसी भी बयान से पहले, ब्लॉक की शुरुआत में होनी चाहिए। एक ब्लॉक में अन्य विवरणों के साथ intermixed किए जाने की

int main(void) { 
    // Declarations first: 
    FILE *fp; 

    // Then statements: 
    printf("Hello world!\n"); 
    fp = fopen("test.txt", "r"); 
    return 0; 
} 

C99 और सी ++ दोनों घोषणाओं की अनुमति देते हैं: तो, main में fp की घोषणा printf से पहले आने की जरूरत है। विजुअल सी ++ कंपाइलर सी 99 का समर्थन नहीं करता है। यदि आपने अपना मूल कोड C++ फ़ाइल (एक .cpp एक्सटेंशन के साथ) के रूप में संकलित किया है, तो यह सफलतापूर्वक संकलित होगा।

+0

आप सही जवाब के लिए धन्यवाद जेम्स मैकनेलिस हैं! – Msum

+0

यदि उसका उत्तर सही है, तो आपको बाईं ओर स्थित चेकमार्क पर क्लिक करके इसे स्वीकार करना चाहिए। – Alex

+0

धन्यवाद, मुझे यह नहीं पता था। – Msum

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