2013-03-04 11 views
6

Próbuję skompilować program (który nie pisałem) i pojawia się następujący błąd:Co oznacza "#elif bez wyrażenia"?

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 

Plik def.h wygląda tak:

#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 

Linia 6 jest linia tylko przed#error "L defined elsewhere".

kompilator:

$ 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. 

Jakieś pomysły jak to naprawić?

Odpowiedz

20

Ponieważ #elif oczekuje wyrażenia, podobnie jak #if. Chcesz użyć #else. W przeciwnym razie trzeba dać wyraz:

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

(odpowiednik)

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

Czy jesteś pewien? Pobrałem z publicznego repozytorium – user000001

+0

@ user000001: Jestem tego całkiem pewien. Możliwe jednak, że kompilator używany przez ludzi interpretuje puste wyrażenie jako '0', co nie spowodowałoby nigdy kompilacji danego segmentu. Ale to wygląda jak literówka. – Zeta

+0

Próbowałem go i wydaje się działać. Thanx! – user000001