小编use*_*122的帖子

创建一个可以根据参数省略行的宏

我有以下几行代码,由数据库导出程序创建:

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中是否可行?

c gcc c-preprocessor

4
推荐指数
1
解决办法
102
查看次数

标签 统计

c ×1

c-preprocessor ×1

gcc ×1