2013-03-04 280 views
6

我試圖編譯程序(即我沒有寫),我收到以下錯誤:「#elif with no expression」是什麼意思?

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"

Compiler是:

$ 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 2013-03-04 15:01:31

+0

@ user000001:我很確定。但是,人們使用的編譯器可能會將空表達式解釋爲'0',這將導致不會編譯給定段。但它看起來像一個錯字。 – Zeta 2013-03-04 15:02:50

+0

我試過了,它似乎工作。感謝名單!它改變了gcc 4.4中的 – user000001 2013-03-04 15:05:18