我有一些库代码可以确保文件不存在。由于它是库代码,我认为值得努力检查其他错误代码并报告它们:
struct stat statBuf;
if(::stat(fname.c_str(), &statBuf) == 0){
LOG(ERROR) << "The file (" << fname << ") already exists. BAD.";
return ERROR_ALREADY_EXISTS;
}
if(errno != ENOENT){
char errorBuf[512];
strerror_r(errno, errorBuf, 511);
LOG(ERROR) << "The file (" << fname << ") does not exist, but stat-ing gave an error (" << errorBuf << ").";
return ERROR_BAD_FILENAME;
}
在我们尝试-O3
构建而不是调试构建之前,一切都很好,然后获得:
error: ignoring return value of ‘char* strerror_r(int, char*, size_t)’,
declared with attribute warn_unused_result [-Werror=unused-result]
我没有在LOG行中直接使用strerror_r()
的原因是为了便携性; the manual page表示可以返回int
,或者可以返回char*
。
我尝试了演员技巧:
(void)strerror_r(errno, errorBuf, 511);
或:
static_cast<void>( strerror_r(errno, errorBuf, 511) );
但仍然只是得到:
error: ignoring return value of ‘char* strerror_r(int, char*, size_t)’, declared with attribute warn_unused_result [-Werror=unused-result]
(void)strerror_r(errno, errorBuf, 511);
到目前为止,我最好的想法是:
auto dummy = strerror_r(errno, errorBuf, 511);dummy = dummy;
dummy = dummy
位用于停止有关未使用变量的投诉。 : - )
(顺便说一句,我甚至不确定linux手册中提到的“XSI”是什么 - 也许它是我永远不需要的那种便携性?)
答案 0 :(得分:1)
使用-Wno-unused-result
选项。
或者,如果您完全确定它不会造成任何伤害,您可以暂时禁用然后重新启用特定警告。 Here's the corresponding GCC documentation