我想知道是否有一种好的方法可以在C函数中禁用返回。
虽然我通常不会这样做,但有些情况下,在特定的代码块中不应该返回,我想确保这一点。
通常这是为了确保清理函数运行或状态没有留下无效的情况。
如果有许多人在编写代码,那么一些编译器检查可能很方便,因为这可能会意外地漏掉。
some_function(void)
{
/* ... code ... */
#define return __noreturn__ /* any unknown identifier */
{ int return; (void)return; } /* avoids gcc's '-Wunused-macros' */
/* ... code which _can't_ return ... */
#undef return
/* ... code which _can_ return ... */
}
这个方法虽然可行,但比较丑陋,我不想在除了快速本地测试之外的任何场景中使用它。
有没有一种设置宏来禁用和重新启用返回的方式?(也许可以使用某些有毒的_Pragma?但它必须能够解毒)。
some_function(void)
{
/* ... code ... */
RETURN_DISABLE;
/* ... code which _can't_ return ... */
RETURN_ENABLE;
/* ... code which _can_ return ... */
}
注意 1)我知道在大多数情况下,有更好的解决方案,这涉及到重构代码,但我认为仍有一些情况下这种保证是有用的。
注意 2)使用goto
仍然可以绕过清理代码,但我认为这种情况超出了本问题的范围。
return
无法找到return
(我上面链接的示例可以)。但是,在宏中返回是我尽量避免的事情。 - ideasman42goto
,而不是在特定的代码块中返回。 - Brian Cain