说 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但它没有对值做任何事情!它没有被保存、打印或某些计算的一部分或...
它只是被忽略。
这就是你的编译器告诉你的。