2011-05-12 93 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

是的就是這樣 – 2011-05-12 23:50:41

2

你不能詞法比較宏afaik。只有數字。用數字定義第二個宏並使用它。

+0

就是這樣吧 – 2011-05-12 23:50:46