#include <stdio.h>
int fun1(void)
{
printf("%s\r\n",__FUNCTION__);
}
int fun2(void)
{
printf("%s\r\n",__FUNCTION__);
}
#define GET_FUN(id) fun##id
int main(int argc,char **argv)
{
GET_FUN(1)();
}
此时有打印fun1
这就是类似GET_FUN(1)();===fun1();
左值
继续测试
#include <stdio.h>
int fun1(void)
{
printf("%s\r\n",__FUNCTION__);
}
int fun2(void)
{
printf("%s\r\n",__FUNCTION__);
}
int t1(void)
{
printf("%s\r\n",__FUNCTION__);
}
#define GET_FUN(name,id) name##id
int main(int argc,char **argv)
{
GET_FUN(t,1)();
}
输出t1看到就是字符串拼接不需要#字符串化
int main(int argc,char **argv)
{
GET_FUN(f,1)();
}
实战1
//通过ID获得全部结构体 以小博大
GK_USARTBASE_TYPE * GK_usart_read_obj( uint8_t usartid)
{
switch(usartid)
{
case 2:return &GKU2;//WIFI
case 3:return &GKU3;//BLE
default :return NULL;
}
}
**********************不行
#define GET_STRING(name,id) name##id
//通过ID获得全部结构体 以小博大
GK_USARTBASE_TYPE * GK_usart_read_obj( uint8_t usartid)
{
return &GET_STRING(GKU,usartid);
}
..\GMODES\GBASEUSART\gkbaseusart.c(108): error: #20: identifier "GKUusartid" is undefined
+++++++++++++++++++可以 但是没啥用
#define GET_STRING(name,id) name##id
//通过ID获得全部结构体 以小博大
GK_USARTBASE_TYPE * GK_usart_read_obj( uint8_t usartid)
{
switch(usartid)
{
case 2:return &GET_STRING(GKU,2);//WIFI
case 3:return &GET_STRING(GKU,3);//BLE
default :return NULL;
}
}