首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该如何处理从未使用过的值?

我应该如何处理从未使用过的值?
EN

Stack Overflow用户
提问于 2016-04-25 14:01:34
回答 4查看 240关注 0票数 1

我并不总是使用所有的返回值,有时我必须处理返回值。例如:

代码语言:javascript
复制
$ 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,这样编译器就不会抱怨了?我自己的想法是这样的,它可以在不忽略错误的情况下处理这个问题,我可以在没有警告的情况下提交我的代码,然后再处理这个问题:

代码语言:javascript
复制
void int_handler(int signum) {
    if (write(fileno(stdin), s, sizeof s - 1)) {
    } else {}
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-04-25 14:16:44

首先,对于生产质量代码中的文件处理函数,您几乎可以肯定地处理所有返回值。

否则,忽略变量或函数结果的标准方法是将其转换为(void)

票数 2
EN

Stack Overflow用户

发布于 2016-04-25 14:13:33

通常,要抑制此警告,可以执行以下操作:

代码语言:javascript
复制
(void)write(fileno(stdin), s, sizeof s - 1);

但是,发出警告的原因是,write()被声明时头部(<unistd.h>)中有一个属性,这将导致警告。

这个(属性)并不是针对每个函数执行的,而是有选择的。例如,printf()的返回通常被忽略,因为您希望检查IO操作的结果,这是为write()完成的。

因此,如果您真的想忽略这个结果,可以使用(void)func(...);来抑制这个结果。

票数 3
EN

Stack Overflow用户

发布于 2016-04-25 14:18:12

不考虑调用write的返回值是个坏主意,因为I/O可能会失败,因此处理这样的事件很重要。如果确实要删除警告,则应显式忽略返回值:

代码语言:javascript
复制
(void)write(...);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36842827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档