c – 抑制非平常无用的警告“控制可能达到无效功能的结束”
发布时间:2020-12-16 10:49:46 所属栏目:百科 来源:网络整理
导读:这比任何事都更容易出问题,但我想知道是否有任何方法可以抑制警告: control may reach end of non-void function [-Wreturn-type] 对于我知道代码没有问题的特定情况.我的代码库中有一些辅助函数用于抛出异常,对于这样的代码: int foo(int i) { if (i 10)
这比任何事都更容易出问题,但我想知道是否有任何方法可以抑制警告:
对于我知道代码没有问题的特定情况.我的代码库中有一些辅助函数用于抛出异常,对于这样的代码: int foo(int i) { if (i > 10) { return i*10; } else { Exception::throwExcept(MyCustomException("Error: i not in the accepted range")); } } 无论如何,我知道它会返回或抛出.因此,警告在我眼中是无用的,只是编译器无法确定控制流路径实际上最终会抛出. 我仍然希望看到这个警告弹出窗口,因为它实际上表明代码是错误的(即路径不返回或抛出). 这可以通过便携方式实现吗? 编辑:忘了添加我正在使用的编译器,
解决方法
编译器无法弄清楚Exception :: throwExcept()不会返回.这里有两种解决方案.一个是告诉编译器,即
struct Exception { [[noreturn]] static void throwExcept(SomeType const&); }; (clang’s -Wmissing-noreturn,包含在-Weverything中,如果上面的函数可以声明[[noreturn]]但不是),则会发出警告,或者将函数重新排列为 int foo(int i) { if (!(i>10)) Exception::throwExcept(MyCustomException("Error: i not in the accepted range")); return i*10; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |