如果出现错误,则以“正常”情况切换与开关

时间:2010-10-03 14:54:46

标签: coding-style switch-statement case

我对机器代码不太熟悉,但我认为这是一个非常简单的问题 如果我想通过函数返回的整数进行错误处理(而不是抛出异常的函数),那么从机器代码的角度来看,更好的做法是:

  1. 检查条件语句中的整数是否为“错误”值,然后使用switch语句处理“错误”值,或
  2. 切换整数,并提供“好”值以及“坏”值的大小写
  3. 例如,在C ++中:

    enum error_code {E_GOOD, E_BAD, E_UGLY};
    error_code func_b();
    

    选项1

    void func_a()
    {
        error_code err_catch = func_b();
    
        if (err_catch)
        {
            switch (err_catch)
            {
            case E_BAD:
                /* Handle bad case */
                break;
            case E_UGLY:
                /* Handle ugly case */
                break;
            }
        }
    }
    

    选项2

    void func_a()
    {
        error_code err_catch = func_b();
    
        switch (err_catch)
        {
        case E_GOOD:
            break;
        case E_BAD:
            /* Handle bad case */
            break;
        case E_UGLY:
            /* Handle ugly case */
            break;
        }
    }
    

    感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

第一次测试应该是:

if (err_catch != E_GOOD)

明确指出'发生错误'。顺便说一句,您的代码看起来像是通过C ++编译器。 C不会使用前面的error_code创建类型enum;你必须添加:

 typedef enum error_code error_code;

在生成的代码方面,两者之间的差别很小。

我可能会使用选项1(if表示法)只是为了清楚地表明交换机只处理错误情况(因为它只需处理错误情况),但我不反对如果它被呈现给我进行代码审查。

答案 1 :(得分:1)

对于enum类型,我会直接使用switch语句,以便编译器可以确保switch语句真正处理所有可能的值。