为什么在函数块中定义枚举可能是一个坏习惯?

纪尧姆D

我已经编写了一个状态流处理程序,为减少在状态流处理程序之外使用状态流枚举的风险,我在函数块中定义了状态流枚举。

我的代码如下:

static void RequestHandler(bool isThisRequestANewRequest)
{
    typedef enum
    {
        STATE_NEW_REQUEST,
        STATE_1,
        STATE_2,
        STATE_ERROR,
    } States;

    static States  state = STATE_ERROR;

    if(isThisRequestANewRequest == true)
    {
        state = STATE_NEW_REQUEST;
    }

    switch(state)
    {    
        case STATE_NEW_REQUEST:
            //init request flags
            state = STATE_1;
            //lint -fallthrough
        case STATE_1:
            //do something
            break;
        case STATE_2:
            //do something else
            break;
        case STATE_ERROR:
        default:
            //do something in case of error
            break;
     }
}         

这可以算是一种好习惯吗?有没有风险?有什么缺点吗?(维护,阅读,...)

我的一位同事告诉我这不是,但我正在等待基于事实的答案,而不仅仅是原始意见。

注意:我的问题适用于单线程和多线程任务。

伦丁

通常,尽可能缩小范围是一种好习惯。如果要对此进行某种形式的规范引用,我能想到的最接近的是MISRA-C:2012,规则8.9,建议仅在块范围内声明仅由单个函数使用的对象。我不明白为什么同样的不适用于类型。

但是,在switch语句中依靠掉线是不好的做法,因为这会阻止静态分析器(在这种情况下为Lint)查找由missing引起的实际错误break这也使代码更难阅读和维护-我个人认为直通式转换的实践比代码重复性差得多。

如果要在每个函数调用中执行多个状态,请考虑使用简单的if语句:

if(state == STATE_NEW_REQUEST)
{
  ...
  state = STATE_1;
}
if(state == STATE_1)
{
  ...
}

否则,如果每个函数调用仅执行一个状态,则可以使用switch通常,“每个状态执行几个状态”的需求暗示着可以改进更广泛的程序设计。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么使用android:configChanges是一个坏习惯

避开基类构造函数初始化,这是一个坏习惯吗?

赶上Throwable是一个坏习惯吗?

经常注入服务容器是一个坏习惯

循环内导入模块是一个坏习惯吗?

为什么不能在另一个函数中定义一个函数?

为什么在angular 2的构造函数中编写初始化逻辑不是一个好习惯

绘图函数仅在此数据框中绘制一个数量。可能是什么原因?

在数据库设计中具有循环关系是否总是一个坏习惯

为什么C ++编译器可能会复制一个函数退出基本块?

为什么获取 SharedPreferences 的实例是一个异步函数?缓存实例是一个好习惯吗?

关于 isPrime 函数可能是一个愚蠢的问题

可能是由于在 MONGODB 中的一个聚合函数中进行了多次分析

在OWL中,一个属性是否可能是多个属性的逆函数?

方法链接-为什么这是一个好习惯?

为什么“拖拽”文件不是一个好习惯?

为什么使用XML创建GUI在Android中是一个好习惯

替换@Autowired Httpservlet,为什么在springbok中自动装配httpservlet不是一个好习惯?

为什么此定义返回一个函数?

标记助手-自动关闭HTML标记是一个坏习惯吗?

过度依赖预处理器是一个坏习惯吗?

在一个类中定义一个公共枚举有什么好处?

为什么同一个函数中的 var 没有定义?

为什么我在React中的状态在一个函数中定义而在另一个函数中未定义?

在C中定义一个枚举

在Ruby元编程中可能是一个错误

为什么是“使用系统”?不算作坏习惯吗?

为什么从模块导入*中使用坏习惯?

为什么单功能访问器似乎被视为坏习惯?