Reputation: 1948
As far as I know, standard allows redefinition only if the new definition duplicates the old one. So for example,
If,
#define X 100
Then,
#define X 200 // Not allowed
#define X 100 // Allowed
But what confuses me is when the header file includes redefintion which doesn't duplicate the old defintion. For example,
There is a header file, header.h
such that
#ifndef X
#define X 100
#endif
and source code main.c
such that
#define X 10
#include "header.h"
Since #define X 100
is below #define X 10
in the main
file, I thought this would occur error. But surprisingly, the compiler does not complain! Why is such behaviour allowed in C?
Upvotes: 1
Views: 50
Reputation: 53006
Of course it doesn't, because #define X 100
is never reached.
Think about this, what does #ifndef
do?
Put the #define X 10
below the #include
, what happens now?
Upvotes: 3