说 s1 和 s2“未使用计算值”,但我的最终结果是正确的。为什么?

我有一个C语言的基本问题?我在编译代码的时候遇到了一个奇怪的警告,说s1和s2“没有使用计算的值”,但我最终的结果是正确的。为什么?

static const char *CutStringNchar(const char *s1, const char *s2)
{
    if ((s1 == NULL) || (s2 == NULL))
    {
        return NULL;
    }
    char ch1 = *s1;
    char ch2 = *s2;
    while (1)
    {
        if (ch1 == ch2)
        {
            *s1++;
            *s2++;
            ch1 = *s1;
            ch2 = *s2;
            //printf("ch1 = %c\n", ch1);
            if (ch2 != '\0')
            {
                continue;
            }
            else
            {
                return s1;
            }
        }
        else
        {
            return NULL;
        }
    }
}

int main(void)
{
    printf("ret = %s\n", CutStringNchar("test/aa", "test/a"));
    const char *ret = CutStringNchar("test/aa", "test/a");
    printf("%s\n", ret);
    return 0;
}

警告:

warning: value computed is not used [-Wunused-value]
             *s1++;
             ^~~~~
warning: value computed is not used [-Wunused-value]
             *s2++;
             ^~~~~

结果 :

./a.out
ret = a
a

回答

表达式 like*s1++;包括两个运算符,即*++(后增量)。除非您是有经验的 C 程序员,否则我建议您避免使用多个运算符的表达式(只要可能)。而是用多个表达式编写代码。

所以而不是:

*s1++;

*s1;
s1++;

从这一点很明显,*s1;它没有做任何有用的事情。它读取指向的对象的值,s1但它没有对值做任何事情!它没有被保存、打印或某些计算的一部分或...

它只是被忽略。

这就是你的编译器告诉你的。


以上是说 s1 和 s2“未使用计算值”,但我的最终结果是正确的。为什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>