My guess would be that this is because main is special (the entry point of an executable).
Yes - I was a little surprised that the 'main' name didn't cause problems on Windows. Of course, I haven't tested it out extensively but there's certainly no problem for me (on Win32) with the code you just posted.
I've only just now given it a run on linux. Won't build for me - I get all sorts of bizarre errors that don't even warrant thinking about. (Naming the function "main2" works fine.)