You could also use gcc options to output all the macros define in your code. In fact, you can do quite a lot of stuff...
Code:
gcc -E -o ListDef -dM -P YourSrcCode.c
will generate a list of `#define' directives for all the macros defined during the execution of the preprocessor, including predefined macros. You might not find __FILE in here because, from what i saw from the result of
Code:
gcc -E -o ListDef -dD -P YourSrcCode.c
well, __FILE is used in a type definition and used one or two lines after that. So, having a macro expansion for __FILE as something else than a type will result in an error here.
Note that i'm a poor Windows user (yeah, i'll have to install one of those Linux distribution one day heh), thus i don't have a really young version of gcc (3.4.4).
But you may be able to investigate further using the gcc options controlling the preprocessor.
If you have the latest version of gcc, you'll find
here some lovely informations.