2012-10-17 45 views
0

我想打一个ç宏if语句来替换。为指针C预处理器宏结构成员

我从来没有能够很好地掌握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 
} 

我得到一个错误:

error: expected identifier before numeric constant|

+1

你已经离开了')'在'如果()'。另外,它的结构不是结构。 – moonshadow

+0

这不是主要问题,但在你的'if'丢失的圆括号。 – Yamaneko

+0

我们不得不认为这是伪代码,因为它不是有效的C代码。 – Lundin

回答

2

我认为你是在两种意义上使用的名称how:作为cur_tag成员,并将其作为您的宏观参数browserTagCheck。尝试为宏参数使用不同的名称。

+0

OK,这是有道理的。是有办法使用相同的名称,以使宏观法律..?在它周围使用某种括号? –

+1

不是我所知道的,但即使有,我听起来也不觉得这样会很明显......使用类似的名称如'_how'怎么样? – gcbenison

0

不要那样做。从来没有尝试重新发明C语言,这是非常糟糕的做法。

相反,我会强烈建议这个:

inline bool browserTagCheck (const struct something_t* x) 
{ 
    return x->tag == BROWSER_HTML_HOW_OPENTAG; 
} 


... 

if(browserTagCheck(&ibot)) 
{ 
    doStuff(); 
} 

内联是最有可能甚至没有必要的,因为这似乎是某种形式的Web/HTML应用程序没有实时性要求。