我有一个定义设备型号的宏。我在确定如何将其与字符串进行比较时遇到问题。
在客户的特定标题中,我已按如下方式定义了我的宏:
#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。
答案 0 :(得分:4)
假设C ++的预处理器与C99的工作方式相同,那么你要做的就是无法工作。在FTP_MODEL_NUM == CT1031
扩展到例如CT1030 == CT1031
之后,表达式中剩余的所有标识符都将替换为0,从而产生0 == 0
,这始终为真。我相信你要做的事情的标准方法是定义一个与模型编号同名的宏(例如#define CT1030
),然后用#ifdef CT1031
实现测试。
答案 1 :(得分:2)
你无法从词汇上比较宏观。只有数字。使用数字定义第二个宏并使用它。