#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;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp1bmlvbiBGUHRyVG9PUHRyX3UKewoJdm9pZCAoKkZQdHIpKCB2b2lkICk7IAoJdm9pZCAgKk9QdHI7Cn07CgoKI2RlZmluZSBGVU5DVElPTl9BRFIoIEZVTkNUSU9OX05BTUUgKSB7ICAgCQkJCQkgICAgICBcCgkJCQkJICB1bmlvbiBGUHRyVG9PUHRyX3UgUHRyOyAgICAgICAgICAgICAgICAgICAgIFwKCQkJCQkgIFB0ci5GUHRyID0gKHZvaWQgKCopKCB2b2lkICkpRlVOQ1RJT05fTkFNRTsgXAoJCQkJCSAgcHJpbnRmKCAiJXBcbiIsIAkgIAkJICAgICAgXAoJCQkJCQkgIFB0ci5PUHRyICk7IAkJCSAgICAgIFwKCQkJCSAgICAgIH0KCgoKaW50IGFkZCggaW50IGEsIGludCBiICkKewoJcmV0dXJuIGEgKyBiOwp9CgoKCmludCBzdWIoIGludCBhLCBpbnQgYiApCnsKCXJldHVybiBhIC0gYjsKfQoKCgppbnQgbWFpbih2b2lkKQp7CglGVU5DVElPTl9BRFIoIG1haW4gKQoJRlVOQ1RJT05fQURSKCBhZGQgKQoJRlVOQ1RJT05fQURSKCBzdWIgKQoKCXJldHVybiAwOwp9Cg==