2013-03-04 48 views
6

Tôi cố gắng để biên dịch chương trình (mà tôi đã không viết) và tôi nhận được lỗi sau:"#elif không có biểu thức" nghĩa là gì?

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 

file def.h trông như thế này:

#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 

dòng 6 là dòng chỉ trước#error "L defined elsewhere".

Compiler là:

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

Bất kỳ ý tưởng làm thế nào để sửa chữa nó?

Trả lời

20

#elif mong đợi một biểu thức, giống như #if. Bạn muốn sử dụng #else. Nếu không, bạn phải từ bỏ khái niệm:

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

(tương đương)

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

Bạn có chắc chắn về điều đó? Tôi đã tải xuống từ repo công khai – user000001

+0

@ user000001: Tôi khá chắc chắn về điều đó. Tuy nhiên, có thể trình biên dịch được mọi người sử dụng diễn giải một biểu thức trống là '0', điều này sẽ dẫn đến việc không biên dịch phân đoạn đã cho trước đây. Nhưng nó trông giống như một lỗi đánh máy. – Zeta

+0

Tôi đã thử nó và có vẻ như nó hoạt động. Thanx! – user000001

Các vấn đề liên quan