2011-09-03 20 views
3
#define BINARY_TREE_PARENT_CORRECT(son, parent) ((son) ? (son->parent == parent) : 1) 

これは、構造体のメンバを意味son->parentparentson, parentparentに置き換えられますことが判明します。これはgccプリプロセッサのバグですか?

gccのバージョンは4.1.2です。

あなたはバグか期待される行動だと思いませんか?

答えて

2

動作は正しいです。すべての引用されていない出現はに置き換えられます。プリプロセッサは、あなたが意味するものを推測しようとしません。あなたの言うことを置き換えるだけです。

1

これは予想される動作です。プリプロセッサはCの構文を知らない(制御式を#ifで評価するときを除いて) - トークンを置き換えるだけである。

1

簡単な修正:パラメータ名を要素名と異なるように変更します。

#define BINARY_TREE_PARENT_CORRECT(son, par) ((son) ? (son->parent == par) : 1) 

cppは、親と一致しないため、期待する動作が得られます。

関連する問題