Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coding style 如果出现错误,则使用“切换”与“切换”;“好”;案例_Coding Style_Switch Statement_Case - Fatal编程技术网

Coding style 如果出现错误,则使用“切换”与“切换”;“好”;案例

Coding style 如果出现错误,则使用“切换”与“切换”;“好”;案例,coding-style,switch-statement,case,Coding Style,Switch Statement,Case,我不太熟悉机器代码,但我认为这是一个非常简单的问题。 如果我想通过函数返回的整数(而不是抛出异常的函数)进行错误处理,从机器代码的角度来看,更好的做法是: 检查条件语句中的整数是否有“坏”值,然后使用switch语句处理“坏”值,或 切换整数,并提供“好”值和“坏”值的大小写 例如,在C++中: enum error_code {E_GOOD, E_BAD, E_UGLY}; error_code func_b(); 选项1 void func_a() { error_code err

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

  • 检查条件语句中的整数是否有“坏”值,然后使用switch语句处理“坏”值,或
  • 切换整数,并提供“好”值和“坏”值的大小写
  • 例如,在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;
        }
    }
    

    谢谢您的帮助。

    第一个测试可能是:

    if (err_catch != E_GOOD)
    
    “发生错误”是明确的。顺便说一下,你的代码看起来就像是通过C++编译器。C不使用前面的
    枚举创建类型
    错误\u code
    ;您必须添加:

     typedef enum error_code error_code;
    
    就生成的代码而言,两者之间的差别很小


    我可能会使用选项1(if
    表示法)来明确开关只处理错误情况(因为它只需要处理错误情况),但如果将其提交给我进行代码审查,我也不会反对,我会直接使用
    switch
    语句,这样编译器就可以确保
    switch
    语句真正处理所有可能的值。

    啊,是的,忘记了C不执行自动
    typedef
    s。对C++进行了微小的改动。现在你提到了,我记得编译器抱怨在代码< >开关<代码>中没有使用一个<代码> EnUM <代码>值,奇怪的是,它是<代码> EyGooule<代码>值。这是在一个
    catch
    块中,因此我没有理由提供
    E_GOOD
    案例,但编译器仍然对此发出警告。