我有以下几行代码,由数据库导出程序创建:
typedef struct _s8_VARB
{
unsigned char _byte[8];
} s8_VARB;
const s8_VARB varb00[] = {
mMM(1,25,22,12,0,0,0,0,27)
mMM(0,1,29,12,0,0,0,0,21)
mMM(1,1,36,12,0,0,0,0,22)
}
Run Code Online (Sandbox Code Playgroud)
这mMM是一个宏,我想用一个在编译期间产生以下数据的功能来定义:
const s8_VARB varb00[] = {
1,25,22,12,0,0,0,0,27,
1,1,36,12,0,0,0,0,22,
}
Run Code Online (Sandbox Code Playgroud)
所以它基本上应该检查第一个参数.如果为0,则应省略该完整行.如果为1,则所有参数(第1个除外)应该"放在行上",以逗号结尾.
我试过的是这个:
#define COMMA ,
#define mMM(cond, a,b,c,d,e,f,g,h) (cond) ? (a),(b),(c),(d),(e),(f),(g),(h) COMMA :
Run Code Online (Sandbox Code Playgroud)
但这不起作用.甚至没有编译,因为gcc抱怨:
error: expected expression before ':' token
这个宏定义应该如何?这在C中是否可行?