GCC 4.4 and better preprocessor checks
GCC 4.4 will show more preprocessor errors when compiling code, partly because some new checks have been added and partly because the full preprocessor directives are now checked. So let's review some common problems. Let's take some code like this:
#ifdef A #elif #endif
This will now give:
t.c:2:6: error: #elif with no expression
The reason is that an #elif always needs an argument. Looking at the code, it's obvious that a #else should be used.
Another common issue is this one:
#define B #ifdef A #elif B #endif
The problem here is that you're trying to check whether B is defined, so the third line has to be:
#elif defined(B)
Finally, the following code:
#ifdef A #elif define(B) #endif
will give:
t.c:2:13: error: missing binary operator before token "("
It took me a minute to see what was wrong with the code... but define is a typo and what you really want is defined.