我想创建一个 C 宏来替换if语句。
我从来没有能够很好地掌握 C 宏,我是否需要做令牌 粘贴?
#define BROWSER_HTML_HOW_OPENTAG 0x19939292
structure { dword how; } _tag;
structure { _tag cur_tag; } _ibot;
// works fine
foo()
{
_ibot*ibot;
if(ibot->cur_tag->how==BROWSER_HTML_HOW_OPENTAG) { } // do something
}
但我想实现这个
#define browserTagCheck(tag,how) (tag->how==how)
foo()
{
_ibot*ibot;
if(browserTagCheck(ibot->cur_tag,BROWSER_HTML_HOW_OPENTAG) {} // do something
}
我收到错误:
错误:数字常量前的预期标识符|
答案 0 :(得分:2)
我认为您在两个意义上使用了名称how
:作为cur_tag
的成员,以及作为browserTagCheck
宏的参数。尝试为宏参数使用不同的名称。
答案 1 :(得分:0)
不要那样做。永远不要试图重新发明C语言,这是非常糟糕的做法。
相反,我强烈建议:
inline bool browserTagCheck (const struct something_t* x)
{
return x->tag == BROWSER_HTML_HOW_OPENTAG;
}
...
if(browserTagCheck(&ibot))
{
doStuff();
}
内联很可能甚至不需要,因为这似乎是某种web / html应用程序,没有实时要求。