【问题标题】:pointer "value computed is not used" in c functionc函数中的指针“未使用计算的值”
【发布时间】:2011-05-19 20:39:56
【问题描述】:

我编写了一个函数,它可以按要求的长度缩短字符串(单词的句子)。我不希望句子的删减恰好在一个单词的中间。所以我跳过 n 个字符,直到我到达一个空格并在那里剪切句子字符串。 我的问题并不是真正的问题,编译我的函数会吐出一条警告,上面写着“警告:未使用计算的值”,请参阅代码中的注释行。该功能按预期工作。 所以要么我是盲人,要么我对我的项目坐得太久,实际上我不明白这个警告。有人可以指出函数中的缺陷吗?


char *
str_cut(char *s, size_t len) {
    char *p = NULL;
    int n = 3;

    p = s + len;
    if (p < (s + strlen (s))) {
        /*
         * do not cut string in middle of a word.
         * if cut-point is no space, reducue string until space reached ...
         */
        if (*p != ' ')
            while (*p != ' ')
                *p--;   // TODO: triggers warning: warning: value computed is not used

        /* add space for dots and extra space, terminate string */
        p += n + 1;
        *p = '\0';

        /* append dots */
        while (n-- && (--p > s))
            *p = '.';
    }
    return s;
}

我在开发机上的编译器是“gcc version 4.2.4 (Ubuntu 4.2.4-1ubuntu4)”

【问题讨论】:

  • 你为什么使用 if then a while? (只是好奇)
  • 另外,它应该在那个循环中检查p &gt; s(就像在第二个循环中所做的那样)。
  • @Blam:因为它是 Alpha 代码,还不是很干净。是的,不需要那个“如果”。谢谢 :-) @lars:是的,谢谢,我刚刚添加了!
  • 感谢上帝编译器居然抱怨^^。
  • 真的!这就是为什么我在开发过程中总是有编译命令的“-Wall”开关!

标签: c pointers gcc


【解决方案1】:

警告是由于*(取消引用)——您没有在任何地方使用取消引用的值。做吧:

p--;

警告应该消失。

【讨论】:

    【解决方案2】:

    *p--*(p--) 相同。

    减量被评估,然后你取消引用它的结果。您实际上并没有对该结果做任何事情,因此会发出警告。如果你只是说*p,你会得到同样的警告。

    【讨论】:

    • 我知道这很简单 :-) ... 对不起,我应该自己检查一下,有时因为所有的树都不容易看到阿甘...
    • 注:递减的结果是指针的原始值。
    • 我最近忘记了这个。将char* p 替换为char** p 并将p++ 更改为*p++;期待(*p)++,但这个答案让我理顺了。为了清楚起见,最终更改为*p = *p + 1
    【解决方案3】:

    你这样做只是为了副作用

                *p--;
    
    • 副作用:减少 p
    • 表达式的值:p指向的值

    编译器警告你表达式的值没有被使用:-)

    【讨论】:

      猜你喜欢
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多