プロが教える店舗&オフィスのセキュリティ対策術

Motifのヘッダー(Aとする)にMax(a,b)というdefineがあり、そのヘッダーの(恐らく)後にincludeしている某クラスライブラリのヘッダー(Bとする)の関数定義にMax(a,b)というのがあります。
そのため、B中のMaxでは、Aのdefineが展開されてしまい、コンパイルエラーになってしまいます。
どちらのヘッダーも修正するわけにはいかないのですが、includeの順番を変えようにも、どこでincludeされているのか調査するのも難航しています。
何か回避策、もしくは解析するのに便利なツールなどご存知でしたら教えてください。
なお、開発環境はUNIX(正しくはAIX)です。

A 回答 (2件)

某クラスライブラリのヘッダーを include している直前で



#undef Max

とする。但し、それ以降で、マクロ Max は使えません。
    • good
    • 0

やはり、



#include <Motifのヘッダー>
#ifdef Max
#undef Max   // 一旦undefして
#endif
#include <それ以外のヘッダー>

とするのが正解かと。(あまり、エレガントではないですが)
Maxマクロがどこで定義されているのかはGrepツールを使って
インクルードファイル中を調べれば見つかるかと思いますが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!