C ++预处理程序指令

时间:2011-05-12 23:38:59

标签: c++ qt c-preprocessor

我有一个定义设备型号的宏。我在确定如何将其与字符串进行比较时遇到问题。

在客户的特定标题中,我已按如下方式定义了我的宏:

#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。

2 个答案:

答案 0 :(得分:4)

假设C ++的预处理器与C99的工作方式相同,那么你要做的就是无法工作。在FTP_MODEL_NUM == CT1031扩展到例如CT1030 == CT1031之后,表达式中剩余的所有标识符都将替换为0,从而产生0 == 0,这始终为真。我相信你要做的事情的标准方法是定义一个与模型编号同名的宏(例如#define CT1030),然后用#ifdef CT1031实现测试。

答案 1 :(得分:2)

你无法从词汇上比较宏观。只有数字。使用数字定义第二个宏并使用它。