相关疑难解决方法(0)

noreturn有什么意义?

[dcl.attr.noreturn]提供以下示例:

[[ noreturn ]] void f() {
    throw "error";
    // OK
}
Run Code Online (Sandbox Code Playgroud)

但我不明白有什么意义[[noreturn]],因为函数的返回类型已经存在void.

那么,该noreturn属性的重点是什么?它应该如何使用?

c++ attributes c++11 noreturn

178
推荐指数
5
解决办法
3万
查看次数

如何在C中明确地落实

较新版本的gcc提供了Wimplicit-fallthrough,这对于大多数switch语句都很有用.但是,我有一个switch语句,我希望允许所有case语句的掉头.

有没有办法明确地通过?我宁愿避免Wno-implicit-fallthrough为这个文件编译.

编辑:我正在寻找一种方法来通过显式(如果可能)使下降,而不是通过编译器开关或编译指示关闭警告.

c gcc c99 gcc-warning

20
推荐指数
2
解决办法
5369
查看次数

如何在gcc中正确使用__attribute __((fallthrough))

代码示例:

int main(int argc, char **argv)
{
    switch(argc)
    {
    case 0:
        argc = 5;
        __attribute__((fallthrough));

    case 1:
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

仅使用gcc 6.3.0-std=c11此代码给出警告:

<source>: In function 'main':
7 : <source>:7:3: warning: empty declaration
   __attribute__((fallthrough));
   ^~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

在不引起警告的情况下使用此方法的正确方法是什么?

c gcc switch-statement fall-through

5
推荐指数
2
解决办法
5235
查看次数

开关可能掉线(可能不会掉线)

在GCC 7上,我已在Qt creator 4.9上启用了大多数警告。现在,我有一个switch语句,它涵盖了所有枚举值。如果添加,default:我会收到警告(来自Qt创建者):

warning: default label in switch which covers all enumeration values
Run Code Online (Sandbox Code Playgroud)

如果我删除,default:则会收到另一个警告(来自GCC):

error: this statement may fall through [-Werror=implicit-fallthrough=]  
       }  
       ^

error: all warnings being treated as errors
Run Code Online (Sandbox Code Playgroud)

我应该做些什么?关闭警告?它们很有用,我不想关闭它们中的任何一个,但是Wimplicit-fallthrough似乎有问题。

[[fallthrough]]无济于事,因为cases以a结尾return(从Qt创建者那里):

warning: fallthrough annotation in unreachable code
Run Code Online (Sandbox Code Playgroud)

__attribute__ ((fallthrough))也没做任何事 /* FALLTHRU */[[gnu::fallthrough]]或都没有// fall through。大概是因为-pedantic

例:

enum class E {a, b, c};

QVariant fun(E e) {
     switch (e) {
        case …
Run Code Online (Sandbox Code Playgroud)

c++ gcc qt-creator

4
推荐指数
1
解决办法
202
查看次数