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

标签 c gcc posix compiler-warnings

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

$ 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/

相关文章:

c - 相等或不重叠

c++ - 有没有办法在所有 C 或 CPP 文件中自动包含头文件?

c - 替换 ioctl() 函数

c - int 和 float 除法给出 0 作为输出

linux - 实现工作线程(在 Linux 中): How offensive is this?

c - 是否有任何普通理由使用 open() 而不是 fopen()?

c - 这段代码有什么区别?

c - SQLite:当主数据库有一个打开的准备语句时,为什么我不能分离数据库?

c - 为什么我的 sqlite3 文件从未被创建?

c++ - 在 Linux 中使用 gcc 4.1 编译的 C++03 应用程序中使用 C++11 共享库?