我并不总是使用所有返回值,有时我必须处理返回值。例如:
$ make
gcc -pedantic -std=c99 -Wall -O3 -ledit -g -DVERSION=\"v0.160425-2-gc443\" -c -o main.o main.c
main.c: In function ‘int_handler’:
main.c:532:5: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
write(fileno(stdin), s, sizeof s - 1);
^
gcc -o shell main.o errors.c util.c pipeline.c -ledit
我应该怎么做才能避免警告?有没有一种“使用”变量的好方法,比如将它写入 /dev/null
以便编译器不会提示?我自己的想法是这样的,它在不忽略错误的情况下处理问题,我可以在没有警告的情况下提交我的代码并稍后处理:
void int_handler(int signum) {
if (write(fileno(stdin), s, sizeof s - 1)) {
} else {}
}
最佳答案
通常要抑制此警告,您可以执行以下操作:
(void)write(fileno(stdin), s, sizeof s - 1);
但是警告的原因是因为write()
在 header ( <unistd.h>
) 中使用导致警告的属性声明。
这个(属性)不是针对每个函数做的,而是有选择地做的。例如,printf()
的返回通常被忽略。
因为,您想要检查 IO 操作的结果,所以它已为 write()
完成。 .
所以,如果你真的想忽略结果,你可以使用 (void)func(...);
来抑制这一点。
关于c - 我应该如何处理从未使用过的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36842827/