2011-05-12 10 views
0

私は、装置のモデル番号を定義するマクロを持っています。私はそれを文字列と比較する方法を決定する際に問題を抱えています。C++プリプロセッサディレクティブ

次のように私は私のマクロを定義している顧客の特定のヘッダで

ここ
#define FTP_MODEL_NUM CT1030 

私は条件付きでモデル数に応じて、コードのセクションをコンパイルしたいが、関係なく価値をどのような私のマクロは、それをコンパイルしていませんとにかく:

#if FTP_MODEL_NUM == CT1031 
    QMessageBox * lolers=new QMessageBox; 
    lolers->setWindowTitle(tr("title")); 
    lolers->setText(tr("this is test")); 
    lolers->show(); 
#endif 

何が欠けていますか? ==演算子を使用する場合、絶対に別のマクロと比較する必要はありますか?私はLinux上でQtを使用しています。

答えて

4

C++のプリプロセッサがC99と同じように動作すると仮定すると、あなたがしようとしているものは動作しません。 FTP_MODEL_NUM == CT1031が、例えばCT1030 == CT1031に展開された後、式に残っている識別子はすべて0に置き換えられ、常に真である0 == 0となる。あなたがしようとしていることを行う標準的な方法は、モデル番号と同じ名前のマクロを定義し(例:#define CT1030)、#ifdef CT1031でテストを実装することです。

+0

でした –

2

afaikのマクロをレキシカルに比較することはできません。数値のみです。数値で2番目のマクロを定義し、それを使用します。

+0

それは –

関連する問題