clang 表达式中未使用的值

标签 c warnings clang

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/

相关文章:

c - 在 C 语言中使用 MPI_Reduce

php - 为什么我在使用 php sdk 的 Eclipse Indigo 中收到 "Undefined attribute name"警告?

ruby - 如何避免 RSpec 中的 "Useless use of == in void context"?

c - fscanf != eof Clang 编译器,异常行为

未修改的本地地址是否会在 setjmp/longjmp 中损坏?

Python - Windows 中的附魔包

c++ - strncpy 文档问题

c - scanf ("%[^\n]s",a) 设置字符串大小

Mysql:添加外键不会在 MyISAM 表上发出警告/错误

c++ - 临时对象的 Clang 6 中的模板参数推导被破坏