警告:逗号的左手/右手操作数无效

时间:2015-01-31 15:03:09

标签: c++ g++

我有这些警告,我不知道如何解决它们。

warning: left-hand operand of comma has no effect
warning: right-hand operand of comma has no effect

代码:

size_t cCsvAlias::operator [] (const char* name) const
{
    NAME2INDEX_MAP::const_iterator itr(m_Name2Index.find(Lower(name)));
    if (itr == m_Name2Index.end())
    {
        LogToFile(NULL, "cannot find suitable conversion for %s", name);
        Assert(false && "cannot find suitable conversion");
        return 0;
    }

    return itr->second;
}

警告来自:

LogToFile(NULL, "cannot find suitable conversion for %s", name);

提前致谢!

编辑:

#define LogToFile (void)(0);

2 个答案:

答案 0 :(得分:2)

手动展开宏,就像预处理器会为你做的那样,你得到:

(void) (0);(NULL, "cannot find suitable conversion for %s", name);

右括号中的表达式由逗号运算符分隔的三个语句组成。编译器警告您前两个没有效果。

逗号运算符将多个表达式拼接在一起,按顺序对它们进行评估。右括号中的逗号分隔表达式计算为逗号链中最终表达式的值(在本例中为name)。然而,前两个表达式(NULL"cannot find suitable conversion for "%s")实际上并没有做任何事情;这是编译器警告你的内容。

答案 1 :(得分:0)

您可以通过以下方式替换宏来解决警告:

inline void __throw_to_dev_null(const void*, const char*, ... ) {}
#define LogToFile __throw_to_dev_null