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
}

エラーが発生します:

エラー: 数値定数の前に識別子が必要です |

4

2 に答える 2

1

how名前は、のメンバーとして、およびマクロcur_tagの引数として、 2つの意味で使用していると思います。browserTagCheckマクロ引数に別の名前を使用してみてください。

于 2012-10-17T13:35:54.490 に答える
0

そうしないでください。C言語を再発明しようとしないでください。それは非常に悪い習慣です。

代わりに、次のことを強くお勧めします。

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


...

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

これは、リアルタイム要件のないある種の web/html アプリのように見えるため、インライン化はほとんど必要ありません。

于 2012-10-17T14:21:22.677 に答える