C预处理器宏用于指向结构成员的指针

时间:2012-10-17 13:33:34

标签: c pointers macros c-preprocessor

我想创建一个 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
}

我收到错误:

  

错误:数字常量前的预期标识符|

2 个答案:

答案 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应用程序,没有实时要求。