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

在客户的特定标头中,我定义了我的宏,如下所示:

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

最佳答案

假设C ++的预处理器的工作方式与C99的相同,则您尝试执行的操作将无法正常工作。在FTP_MODEL_NUM == CT1031扩展为例如CT1030 == CT1031之后,保留在表达式中的所有标识符都将替换为0,从而产生0 == 0,该值始终为true。我相信执行您要执行的操作的标准方法是定义一个与型号相同名称的宏(例如#define CT1030),然后使用#ifdef CT1031实施测试。

关于c++ - C++预处理程序指令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5985768/

10-10 20:09