#include <stdio.h>

union FPtrToOPtr_u
{
	void (*FPtr)( void ); 
	void  *OPtr;
};


#define FUNCTION_ADR( FUNCTION_NAME ) {   					      \
					  union FPtrToOPtr_u Ptr;                     \
					  Ptr.FPtr = (void (*)( void ))FUNCTION_NAME; \
					  printf( "%p\n", 	  		      \
						  Ptr.OPtr ); 			      \
				      }



int add( int a, int b )
{
	return a + b;
}



int sub( int a, int b )
{
	return a - b;
}



int main(void)
{
	FUNCTION_ADR( main )
	FUNCTION_ADR( add )
	FUNCTION_ADR( sub )

	return 0;
}
