Why this is not giving compilation error : <pre><code>#include&lt;stdio.h&gt;
#define A -B
#define B -C
#define C 5

int main()
{
  printf("The value of A is %d\n", A); 
  return 0;
} 
</code></pre>

<p>In this, Macros as just get replaced -B becomes --C and finally --5.But This should give compilation error as 5 is a constant right?But it actually prints
"The value of A is 5"
Can anyone explain me clearly when will we get l-value error exactly? Because the following code actually gives l-value required error.</p>

<pre><code>#include &lt;stdio.h&gt;
#define PRINT(i, limit) do \
                        { \
                            if (i++ &lt; limit) \
                            { \
                                printf("GeeksQuiz\n"); \
                                continue; \
                            } \
                        }while(1)

int main()
{
    PRINT(0, 3);
    return 0;
}
</code></pre>

<p>Please give me a clear idea when l-value error occurs.I'm tired many times searching an exact reason when will we get l-value error.</p>
