加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 抑制非平常无用的警告“控制可能达到无效功能的结束”

发布时间:2020-12-16 10:49:46 所属栏目:百科 来源:网络整理
导读:这比任何事都更容易出问题,但我想知道是否有任何方法可以抑制警告: control may reach end of non-void function [-Wreturn-type] 对于我知道代码没有问题的特定情况.我的代码库中有一些辅助函数用于抛出异常,对于这样的代码: int foo(int i) { if (i 10)
这比任何事都更容易出问题,但我想知道是否有任何方法可以抑制警告:

control may reach end of non-void function [-Wreturn-type]

对于我知道代码没有问题的特定情况.我的代码库中有一些辅助函数用于抛出异常,对于这样的代码:

int foo(int i) {
    if (i > 10) {
        return i*10;
    }
    else {
        Exception::throwExcept(MyCustomException("Error: i not in the accepted range"));
    }
}

无论如何,我知道它会返回或抛出.因此,警告在我眼中是无用的,只是编译器无法确定控制流路径实际上最终会抛出.

我仍然希望看到这个警告弹出窗口,因为它实际上表明代码是错误的(即路径不返回或抛出).

这可以通过便携方式实现吗?

编辑:忘了添加我正在使用的编译器,

Apple LLVM version 8.1.0 (clang-802.0.41)

解决方法

编译器无法弄清楚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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读