Clang 似乎在警告我表达式中未使用 a char,这是完整的代码部分:
int yeller(const char * channel) {
char *p, *q;
q = p = MAKE_COPY(temp->bind_chan);
while ((p = next_in_comma_list(q, &q))) {
if (!p || !*p)
break;
if (!my_stricmp(p, channel))
return tmp;
特别是这一行:
q = p = MAKE_COPY(temp->bind_chan);
虽然存储到 'p' 的值在封闭表达式中使用,但实际上从未从 'p' 读取该值
我显然是在 while 循环中评估它,这真的是一个“错误”还是我做错了什么?
最佳答案
Clang 提示您的代码中可能存在错误。
代码将值分配给 p
并且这个值在被覆盖之前没有在任何地方使用,这看起来很奇怪并且应该重新访问执行此操作的代码片段。在随后的 while
循环中,您将覆盖 p
的内容,而无需使用其先前的值。
在这样的代码中,此警告可能会更安全:
Status status = do_some_job();
...
(some code where status isn't checked)
...
status = do_some_ther_job();
这很可能是程序员的错误,因为在大多数情况下,如果函数返回状态,则应该对其进行检查。
关于clang 表达式中未使用的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12757651/