Maybe this is a bug!?
I discovered it while compiling the pixman library.
#define macro(a) bla_##a##_
void bla_1_2_(void) {;}
macro(1_2);
E:\c\main.c(70): error #2048: Undeclared identifier 'bla_1' (did you mean 'bla_1_2_'?).
E:\c\main.c(70): error #2001: Syntax error: expected ';' but found '_2_'.
E:\c\main.c(70): error #2048: Undeclared identifier '_2_' (did you mean 'z'?).
			
			
			
				Probably.
PellesC will compile the following 
#define macro(a) bla_##a##_
void bla_12_(void){;}
int _cdecl main( void )
{
	macro(12)();	
	return 0;
}
But not with void bla_1_2_(void){;}
VC6 compiles both.
John
			
			
			
				For some mistery reason the parameter '1_2' is recognized a preprocessor number even if it is an invalid numeric constant (see compiler warnings).
To solve the problem the only solution I can find is to avoid that macro parameter could look as a number:
#define macro(a) bla##a##_        //Remove the underscore following 'bla'
void bla_1_2_(void) {;}
macro(_1_2);                     //Prepend the underscore here to make the parameter not a number...
			
			
				As I wrote, this is done on many places in the pixman library and it would be a lot of work to change this on all occurences. 
Could a moderator move this in the bug report section, please?