【发布时间】:2015-08-06 22:36:45
【问题描述】:
有没有办法将gcc的typeof扩展名转换成字符串,例如:
#define printType(a) printf("%s", #typeof(a))
这样我就可以做到:
int a = 4;
printf("Type of a is: ");
printType(a);
并获得以下输出:
Type of a is: int
可能的用法如下:
#include <stdio.h>
#define indirect_print(a) print_##typeof(a)(a)
void print_int(int *i) {
printf("%d", *i);
}
void print_char(char *c) {
printf("%c", *c);
}
int main(void) {
char C = 'C';
int I = 100;
{
char *a = &C;
indirect_print(a);
}
{
int *a = &I;
indirect_print(a);
}
return 0;
}
如果可能,它应该适用于所有类型,包括结构和联合,而不是依赖于手动将每种类型添加到列表中。
【问题讨论】:
-
您可以尝试使用泛型宏吗?
-
你为什么要这样做?