17-09-2010, 07:51 AM
Hello,
I have a question regarding Rule 12.5: "The operands of a logical && or || shall be primary-expressions."
I often use constructs of the form "(condition1) || (condition2) || ... || (condition n)" to test for illegal values of a set of input parameters in functions (see example below), which should be compliant as far as I understand the rule text without the need of extra parentheses to group the conditions (parenthesised expression, sequence of only logical ||). However, my analysis tool (flexelint, v9.00e) complains about this construct ("non-primary expression"). Did I got something wrong about the definition of "primary expression" or is this a false positive?
Thanks in advance for any answers.
Example:
I have a question regarding Rule 12.5: "The operands of a logical && or || shall be primary-expressions."
I often use constructs of the form "(condition1) || (condition2) || ... || (condition n)" to test for illegal values of a set of input parameters in functions (see example below), which should be compliant as far as I understand the rule text without the need of extra parentheses to group the conditions (parenthesised expression, sequence of only logical ||). However, my analysis tool (flexelint, v9.00e) complains about this construct ("non-primary expression"). Did I got something wrong about the definition of "primary expression" or is this a false positive?
Thanks in advance for any answers.
Example:
Code:
if ((start >= end) || (start > 7U) || (end > 8U)) /* raises rule violation */
{
/* do something */
}
else
{
/* do something different*/
}
if ((start >= end) || ((start > 7U) || (end > 8U))) /* does not raise violation, note extra parentheses around second and third condition */
{
/* do something */
}
else
{
/* do something different*/
}
<t></t>