Joh*_*itb 23 c++ gcc unreachable-code
我得到了很多关于交换机的警告,这些交换机仅部分覆盖了切换的枚举范围.为此,我想有一个"默认"所有这些开关,并将__builtin_unreachable
(GCC内置),在这种情况下,让编译器知道这种情况是不可达.
但是,我才知道GCC4.3还不支持内置版.有没有什么好方法可以模仿这个功能?我考虑过取消引用空指针,但这可能有其他不良影响/警告等.你有更好的主意吗?
您可以调用声明的内联函数,_Noreturn
以便在该调用之后将任何内容标记为无法访问.允许编译器在这样的函数之后抛出任何代码.如果函数本身是static
(并且确实返回),编译器通常也会内联函数.这是一个例子:
static _Noreturn void unreachable() {
return; /* intentional */
}
/* ... */
foo();
bar(); /* should better not return */
unreachable();
baz(); /* compiler will know this is not reachable */
Run Code Online (Sandbox Code Playgroud)
请注意,如果标记的函数_Noreturn
确实返回,则调用未定义的行为.确保永远不会调用所述函数.
嗯,像(因为__builtin_unreachable()出现在4.5):
#define GCC_VERSION (__GNUC__ * 10000 \
+ __GNUC_MINOR__ * 100 \
+ __GNUC_PATCHLEVEL__)
#if GCC_VERSION >= 40500
#define my_unreachable() __builtin_unreachable()
#else
#define my_unreachable() do { printf("Oh noes!!!111\n"); abort(); } while(0)
#endif