6

(私が書いたのではない) プログラムをコンパイルしようとすると、次のエラーが発生します。

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.

それを修正する方法はありますか?

4

1 に答える 1

22

#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
于 2013-03-04T15:00:26.370 に答える