当前位置: 技术问答>linux和unix
如何宏定义一段代码
来源: 互联网 发布时间:2016-12-18
本文导语: 在一个程序中,有若干类似的代码如下: ... echo += snprintf(buf + echo,len - echo,",Item1:"); my_Struct.Rx64Byte+=getStaValue("Item1"); echo += snprintf(buf + echo,len - echo,"%lu",my_Struct.Item1); echo += snprintf(buf + echo,len - echo,",Item2:"); my_Struct....
在一个程序中,有若干类似的代码如下:
...
echo += snprintf(buf + echo,len - echo,",Item1:");
my_Struct.Rx64Byte+=getStaValue("Item1");
echo += snprintf(buf + echo,len - echo,"%lu",my_Struct.Item1);
echo += snprintf(buf + echo,len - echo,",Item2:");
my_Struct.Rx64Byte+=getStaValue("Item2");
echo += snprintf(buf + echo,len - echo,"%lu",my_Struct.Item2);
...
其中,my_Struct为结构体名,Item1,Item2,... ItemN为结构体中的项,本结构项也很多,类似这样的代码很多,
所以想问,如果用一个宏来定义下面这样的代码块的话,该如何实现?
谢谢,其中传给宏的参数就是ItemN。
echo += snprintf(buf + echo,len - echo,",Item1:");
my_Struct.Rx64Byte+=getStaValue("Item1");
echo += snprintf(buf + echo,len - echo,"%lu",my_Struct.Item1);
类似的例子,我也见过,如下:
#define __GET_ND_STAINFO_ITEM__(ret)
do{
//echo += snprintf(buf + echo,len - echo,",(ret):");
sta_info_cable.(ret)+=getStaValue(ret);
echo += snprintf(buf + echo,len - echo,"%lu",sta_info_cable.(ret));
}while(0)
|
懂了,这样应该没问题了
#define TMARCO_(X) do{
echo += snprintf(buf + echo,len - echo,","#X":");
my_Struct.X+=getStaValue(#X);
echo += snprintf(buf + echo,len - echo,"%lu",my_Struct.X);
}while(0)
#define TMARCO_(X) do{
echo += snprintf(buf + echo,len - echo,","#X":");
my_Struct.X+=getStaValue(#X);
echo += snprintf(buf + echo,len - echo,"%lu",my_Struct.X);
}while(0)
|
参考
#include
#include
#include
#include
using namespace std;
#define PRINT(X) do{
printf(",Item"#X":n");
printf("Item"#X);
}while(0)
// #define MARCO_(X) do{
// echo += snprintf(buf + echo,len - echo,",Item"#X":");
// my_Struct.Rx64Byte+=getStaValue("Item"#X);
// echo += snprintf(buf + echo,len - echo,"%lu",my_Struct."Item"#X);
// }while(0)
int main()
{
PRINT(1);
return 0;
}
|
帮顶,学习~~
|
宏定义中#表示去字符串
##表示连接
##表示连接