#define BINARY_TREE_PARENT_CORRECT(son, parent) ((son) ? (son->parent == parent) : 1)
これは、構造体のメンバを意味son->parent
でparent
もson, parent
にparent
に置き換えられますことが判明します。これはgccプリプロセッサのバグですか?
gccのバージョンは4.1.2
です。
あなたはバグか期待される行動だと思いませんか?
#define BINARY_TREE_PARENT_CORRECT(son, parent) ((son) ? (son->parent == parent) : 1)
これは、構造体のメンバを意味son->parent
でparent
もson, parent
にparent
に置き換えられますことが判明します。これはgccプリプロセッサのバグですか?
gccのバージョンは4.1.2
です。
あなたはバグか期待される行動だと思いませんか?
動作は正しいです。すべての引用されていない出現は親に置き換えられます。プリプロセッサは、あなたが意味するものを推測しようとしません。あなたの言うことを置き換えるだけです。
これは予想される動作です。プリプロセッサはCの構文を知らない(制御式を#if
で評価するときを除いて) - トークンを置き換えるだけである。
簡単な修正:パラメータ名を要素名と異なるように変更します。
#define BINARY_TREE_PARENT_CORRECT(son, par) ((son) ? (son->parent == par) : 1)
cppは、親と一致しないため、期待する動作が得られます。