抑制函数 returns 的 "Avoid unnamed object" 警告
Suppress "Avoid unnamed object" warnings for function returns
我有一个日志函数,我有时将 return 的 on 传递给另一个函数,有时单独调用
LogReturnStruct Log(string message) { writeToFile(message); return {message};);
这是因为我有时想记录一些即将尝试的事情,以及它是否成功
void Handle(LogReturnStruct, statusCode)
{
if(statusCode == valid)
Log("sucess: "+ LogReturnStruct.message);
else
Log("failure: "+ LogReturnStruct.message);
}
所以我可以这样调用
Handle(Log("message"),funcThatMightFail());
并且它会在这个调用之前和之后强制记录,并且至少会在调用之前记录,即使调用引发异常
不过我也希望能够只记录一条消息
Log("message"); // alone call
然而,无论我如何使用[[maybe_unused]]
,我似乎都无法抑制编译器警告
"Avoid unnamed objects with custom creation and destruction"
有没有办法在不禁用整个警告的情况下指示此 return 值可能未使用(没关系)?
您似乎可以使用 [[gsl::suppress(es.84)]]
,但它应该在呼叫站点使用 :-/
MACRO 可以提供帮助:
LogReturnStruct LogImpl(string message) { writeToFile(message); return {message}; }
#define Log(s) [[gsl::suppress(es.84)]] LogImpl(s)
更简洁的解决方案是避免警告并创建 2 个函数(您已经拥有它们:))(但需要更改调用站点):
void Handle(LogReturnStruct, statusCode)
{
if(statusCode == valid)
writeToFile("sucess: "+ LogReturnStruct.message);
else
writeToFile("failure: "+ LogReturnStruct.message);
}
和
Handle(Log("message"), funcThatMightFail());
我有一个日志函数,我有时将 return 的 on 传递给另一个函数,有时单独调用
LogReturnStruct Log(string message) { writeToFile(message); return {message};);
这是因为我有时想记录一些即将尝试的事情,以及它是否成功
void Handle(LogReturnStruct, statusCode)
{
if(statusCode == valid)
Log("sucess: "+ LogReturnStruct.message);
else
Log("failure: "+ LogReturnStruct.message);
}
所以我可以这样调用
Handle(Log("message"),funcThatMightFail());
并且它会在这个调用之前和之后强制记录,并且至少会在调用之前记录,即使调用引发异常
不过我也希望能够只记录一条消息
Log("message"); // alone call
然而,无论我如何使用[[maybe_unused]]
,我似乎都无法抑制编译器警告
"Avoid unnamed objects with custom creation and destruction"
有没有办法在不禁用整个警告的情况下指示此 return 值可能未使用(没关系)?
您似乎可以使用 [[gsl::suppress(es.84)]]
,但它应该在呼叫站点使用 :-/
MACRO 可以提供帮助:
LogReturnStruct LogImpl(string message) { writeToFile(message); return {message}; }
#define Log(s) [[gsl::suppress(es.84)]] LogImpl(s)
更简洁的解决方案是避免警告并创建 2 个函数(您已经拥有它们:))(但需要更改调用站点):
void Handle(LogReturnStruct, statusCode)
{
if(statusCode == valid)
writeToFile("sucess: "+ LogReturnStruct.message);
else
writeToFile("failure: "+ LogReturnStruct.message);
}
和
Handle(Log("message"), funcThatMightFail());