# include < iostream >
using namespace std;
// # define DEFINE_VARIABLE(type) type type##1 // 定义某个non-unsigned 类型的变量, 如int int1, char char1
// # define DEFINE_VARIABLE_U(type) unsigned type u##type##1 // 定义某个类型的变量, 如unsigned int uint1, unsigned char uchar1,, 注意使用本宏要把unsigned 去掉
// # define NAME(v) type##1 // 通过类型名获取该类型通过DEFINE_VARIABLE()定义的变量名字
// # define NAME_U(v) u##type##1 // 通过unsigned类型名获取该类型通过DEFINE_VARIABLE()定义的变量名字 , 注意使用本宏要把unsigned 去掉
int main()
{
char c1;
unsigned char uc1;
short s1;
unsigned short us1;
int i1;
unsigned int ui1;
long l1;
unsigned long ul1;
long long ll1;
unsigned long long ull1;
long double ld1;
# define TYPE_NAME(data) typeid(data).name()<<","
# define TYPE_ID(data1,data2) typeid(data1+data2).name()<<","
# define TYPE_IDS(data2)\
cout<<TYPE_NAME(data2)<<TYPE_ID(c1, data2)<<TYPE_ID(uc1, data2)<<TYPE_ID(s1, data2)<<TYPE_ID(us1, data2)<<TYPE_ID(i1, data2)<<TYPE_ID(ui1, data2)<<TYPE_ID(l1, data2)<<TYPE_ID(ul1, data2)<<TYPE_ID(ll1, data2)<<TYPE_ID(ull1, data2)<<TYPE_ID(ld1, data2)<<endl;\
cout << ","<<TYPE_NAME(c1) << TYPE_NAME(uc1) << TYPE_NAME(s1) << TYPE_NAME(us1) << TYPE_NAME(i1) << TYPE_NAME(ui1) << TYPE_NAME(l1) << TYPE_NAME(ul1) << TYPE_NAME(ll1) << TYPE_NAME(ull1) << TYPE_NAME(ld1) << endl;
TYPE_IDS(c1);
TYPE_IDS(uc1);
TYPE_IDS(s1);
TYPE_IDS(us1);
TYPE_IDS(i1);
TYPE_IDS(ui1);
TYPE_IDS(l1);
TYPE_IDS(ul1);
TYPE_IDS(ll1);
TYPE_IDS(ull1);
TYPE_IDS(ld1);
}