#include #define TYPE const char * #define is_type(type_str, type) \ (strcmp(type_str, #type) == 0) #define foo(type, param) \ foo_(#type, (void *) (param)) void foo_(TYPE type, void *param) { if(is_type(type, int)) { printf("%i\n", (int) param); } else if(is_type(type, char *)) { printf("%s\n", (char *) param); } } int main(int argc, char **argv) { foo(int, 5); foo(char *, "omg"); return 0; }