2013-03-04 5 views
6

मैं एक कार्यक्रम को संकलित करने के (है कि मैं नहीं लिखा था) कोशिश कर रहा हूँ और मैं निम्नलिखित त्रुटि मिलती है:"अभिव्यक्ति के साथ #elif" का क्या अर्थ है?

C read.c ... 
In file included from read.c:6:0: 
def.h:6:6: error: #elif with no expression 
make: *** [read.o] Error 1 

फ़ाइल def.h इस तरह दिखता है:

#ifndef TRACE_DEF 
#define TRACE_DEF 

#ifndef L 
    #define L 152064 /* (352 * 288 * 1.5) */ 
#elif 
    #error "L defined elsewhere" 
#endif 

#ifndef MIN 
    #define MIN(a, b) ((a) < (b) ? (a) : (b)) 
#endif 
#ifndef MAX 
    #define MAX(a, b) ((a) > (b) ? (a) : (b)) 
#endif 

पंक्ति 6 ​​लाइन बस है#error "L defined elsewhere" से पहले।

संकलक है:

$ gcc --version 
gcc-4.6.real (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 
Copyright (C) 2011 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

कोई भी विचार है कि यह कैसे तय करने के लिए?

उत्तर

20

क्योंकि #elif#if की तरह एक अभिव्यक्ति की अपेक्षा करता है। आप #else का उपयोग करना चाहते हैं।

#ifndef L 
    #define L 152064 /* (352 * 288 * 1.5) */ 
#elif defined(L) 
    #error "L defined elsewhere" 
#endif 

(बराबर)

#ifndef L 
    #define L 152064 /* (352 * 288 * 1.5) */ 
#else 
    #error "L defined elsewhere" 
#endif 
+0

आप इस बारे में सुनिश्चित कर रहे हैं: नहीं तो आप अभिव्यक्ति देने के लिए है? मैंने एक सार्वजनिक रेपो – user000001

+0

@ user000001 से डाउनलोड किया: मुझे इसके बारे में बहुत यकीन है। हालांकि, यह संभव हो सकता है कि लोगों द्वारा उपयोग किए गए कंपाइलर को खाली अभिव्यक्ति को '0' के रूप में व्याख्या किया जाता है, जिसके परिणामस्वरूप दिए गए सेगमेंट का कोई संकलन नहीं होगा। लेकिन यह सिर्फ एक टाइपो की तरह दिखता है। – Zeta

+0

मैंने कोशिश की और ऐसा लगता है कि यह काम करता है। Thanx! – user000001

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