当前位置: 首页 > 知识库问答 >
问题:

用else子句终止if…else if构造有什么好处?

宇文元明
2023-03-14

我们的组织有一个必需的编码规则(没有任何解释),即:

if...else if构造应该用else子句终止

示例1:

if ( x < 0 )
{
   x = 0;
} /* else not needed */
if ( x < 0 )
{
    x = 0;
}
else if ( y < 0 )
{
    x = 3;
}
else    /* this else clause is required, even if the */
{       /* programmer expects this will never be reached */
        /* no change in value of x */
}

共有1个答案

任伟
2023-03-14

正如另一个答案中提到的,这来自MISRA-C编码指南。目的是防御性编程,这是一个在关键任务编程中经常使用的概念。

也就是说,每个if-else if必须以else结尾,每个switch必须以default结尾。

这有两个原因:

停止失控代码。在关键任务软件中,您需要编写健壮的程序,甚至考虑到极不可能的情况。这样您就可以看到类似这样的代码

if (mybool == TRUE) 
{
} 
else if (mybool == FALSE) 
{
}
else
{
  // handle error
}

这段代码对PC程序员和计算机科学家来说是完全陌生的,但它在关键任务软件中却完全有意义,因为它能捕捉到“mybool”因任何原因被破坏的情况。

从历史上看,您会担心RAM存储器会因为EMI/噪声而损坏。这在今天已经不是什么大问题了。更有可能的是,内存损坏是由于代码中其他地方的bug导致的:指向错误位置的指针、数组越界bug、堆栈溢出、失控代码等。

另外,如果您在每个if后面都写了一个空的else,那么代码就会完全混乱。

MISRA-C:201215.7没有给出为什么不需要else的理由,它只是说:

注意:对于简单的if语句,不需要最后的else语句。

 类似资料:
  • if statements in Smarty have much the same flexibility as php if statements, with a few added features for the . Everyif must be paired with an/if .else andelseif are also permitted. "eq", "ne","neq",

  • 概要 <#if condition> ... <#elseif condition2> ... <#elseif condition3> ... ... <#else> ... </#if> 这里: condition, condition2, 等:将被计算成布尔值的表达式。 elseif 和 else 是可选的。 描述 你可以使用 if, elseif 和 else 指令来条

  • 一个If语句后面跟着一个或多个ElseIf语句,这些语句由布尔表达式组成,然后是一个默认的else语句,当所有条件都变为false时执行。 语法 (Syntax) 以下是VBScript中If Elseif - Else语句的语法。 If(boolean_expression) Then Statement 1 ..... ..... Statement n ElseIf

  • if语句后面可以跟一个else if...else语句,这对于使用单个if...else if语句测试各种条件非常有用。 语法 (Syntax) if...else if...else语句的语法如下 - if boolean_expression_1 { /* Executes when the boolean expression 1 is true */ } else if boolea

  • if语句后面可以跟一个else if...else语句,这对于使用单个if...else if语句测试各种条件非常有用。 语法 (Syntax) if...else if...else语句的语法如下 - if boolean_expression_1 { /* Executes when the boolean expression 1 is true */ } else if boolea

  • 我制作了这个简单的GUI程序,它可以计算特定字符序列的元音和辅音。计数器还可以,但是我对if-else语句有一个问题,当那个字符既不是元音也不是辅音时,我必须显示一条消息...代码如下: 它看起来是这样的: 我输入了一个没有任何特殊字符或数字的字符“序列”。但它仍然显示消息,其中它有元音和辅音以外的其他字符。if-else语句有问题吗?感谢您的帮助:)