如何比较#define定义的字符串和整数?

时间:2019-07-10 11:17:56

标签: c++ arduino c-preprocessor

我有以下C ++代码:

#define VERSION        1
#define TYPE           "this"
...

bool update(const char* json) {
    ...
    const char* theType = doc["type"];     // "this"
    int theVer          = doc["version"];  // 2

    //int ourVer        = VERSION;
    //char ourType[]    = TYPE;

    if ( (theVer > VERSION) && (theType == TYPE) ) {
        return true
    } else {
        return false;
    }
}

我可以同时打印theTypetheVer,但是我无法成功地将它们与常量进行比较。我还试图将 casted 常量(注释掉)进行比较,无济于事。

如何比较#define定义的字符串和整数?

顺便说一句。这是用ArduinoIDE编码的。

5 个答案:

答案 0 :(得分:3)

theType == TYPE比较两个指针。当且仅当地址相同时,它才返回true,而在这里不是这种情况。

改为使用strcmp

if (theVer > VERSION && std::strcmp(theType, TYPE) == 0) {
    // ...
}

strcmp三通比较实际的字符串,当第一个字符串小于,等于时,返回一个数字< 0== 0> 0。或大于秒。为此,您需要#include <cstring>

答案 1 :(得分:2)

我知道L.F的答案已经被接受,但是我希望他们使用print (full_name.title()\nfull_name.upper()\nfull_name.lower())的建议有所异议。您甚至不应再使用strcmp,而应该使用#define。这样一来,您就可以清楚地键入内容,根据我的经验,constexpr可以更好地发挥智能。

constexpr应该使用TYPE。不会强迫您使用旧的c库,并且可以使用==运算符将其与constexpr std::string_view进行比较。

std::string

https://en.cppreference.com/w/cpp/language/constexpr https://en.cppreference.com/w/cpp/string/basic_string_view

答案 2 :(得分:1)

#define不相关。

预处理后,您的代码段完全等于:

bool update(const char* json) {
    const char* theType = doc["type"];     // "this"
    int theVer          = doc["version"];  // 2

    if ( (theVer > 1) && (theType == "this") ) {
        return true
    } else {
        return false;
    }
}

因此,问题被简化为“如何比较两个C字符串?”,举了一个更简单的示例,如下所示:

int main()
{
   const char* theType = "this";
   const bool  matches = (theType == "this");
}

答案是not with ==, but with strcmp

答案 3 :(得分:0)

#define VERSION        1
#define TYPE           "this"
...

bool update(const char* json) {
   ...
   const char* theType = doc["type"];     // "this"
   int theVer          = doc["version"];  // 2

   return (theVer > VERSION) && !strcmp(TYPE,theType) ;
}

答案 4 :(得分:0)

也许这段代码可以帮助您:

bool func()
{
    const string str = "value";
    int number = 3;
    return str == const_string && number == const_number ? true : false;
}