我并不总是使用所有的返回值,有时我必须处理返回值。例如:
$ 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 {}
}发布于 2016-04-25 14:16:44
首先,对于生产质量代码中的文件处理函数,您几乎可以肯定地处理所有返回值。
否则,忽略变量或函数结果的标准方法是将其转换为(void)。
发布于 2016-04-25 14:13:33
通常,要抑制此警告,可以执行以下操作:
(void)write(fileno(stdin), s, sizeof s - 1);但是,发出警告的原因是,write()被声明时头部(<unistd.h>)中有一个属性,这将导致警告。
这个(属性)并不是针对每个函数执行的,而是有选择的。例如,printf()的返回通常被忽略,因为您希望检查IO操作的结果,这是为write()完成的。
因此,如果您真的想忽略这个结果,可以使用(void)func(...);来抑制这个结果。
发布于 2016-04-25 14:18:12
不考虑调用write的返回值是个坏主意,因为I/O可能会失败,因此处理这样的事件很重要。如果确实要删除警告,则应显式忽略返回值:
(void)write(...);https://stackoverflow.com/questions/36842827
复制相似问题