title: What does "#elif with no expression" mean?
body: <p>I am trying to compile a program (that I did not write) and I get the following error:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>File <code>def.h</code> looks like this:</p>
  
  <pre><code>#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) &lt; (b) ? (a) : (b))
  #endif
  #ifndef MAX
    #define MAX(a, b) ((a) &gt; (b) ? (a) : (b))
  #endif
  </code></pre>
  
  <p>Line 6 is the line just <strong>before</strong> <code>#error "L defined elsewhere"</code>.</p>
  
  <p>Compiler is:</p>
  
  <pre><code>$ 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.
  </code></pre>
  
  <p>Any ideas how to fix it?</p>