In fact, the #if directive considers what is to its right as integers.
So if you want to achieve what you asked for, you have to do some arithmetics. For example do a test.c file with:
#define VERSION 7
#if VERSION
#if VERSION - (VERSION % 10 )
#warning Number out of range (1-9)
#else
#warning Number in range (1-9)
#endif
#else
#warning Zero or not a number
#endif
Compile with
gcc -c -o /dev/null test.c
You will the get the message:
"Zero of not a number"... if your VERSION is 0, or does not evaluates (preprocessor-wise) as an integer.
And if VERSION evalutates as an integer, you will get the first or second message according to its value.
This will allow you to do what you were searching for.
Documentation on #if : http://gcc.gnu.org/onlinedocs/cpp/If.html
Note that integer can be expressed like: 123 or 0xCC or anything that evaluates to an integer constant after recursive macro expansion.
If the number is a floating point like: 3.14 it is considered as zero.
You cannot simply distinguish 0 (the integer) with something that is not an integer. There is probably a possibility though, using macro string concatenation, but it remains to be explored.