The analyzer detected a potential error in an expression handling bits. A part of the expression is meaningless or excessive. Usually such errors occur due to a misprint.
Consider this sample:
if (up & (PARAMETER_DPDU | PARAMETER_DPDU | PARAMETER_NG))
The PARAMETER_DPDU constant is used twice here. In a correct code there must be two different constants: PARAMETER_DPDU and PARAMETER_DPDV. The letter 'U' resembles 'V' and that is why this misprint has occurred. This is the correct code:
if (up & (PARAMETER_DPDU | PARAMETER_DPDV | PARAMETER_NG))
Another example. There is no error here but the code is excessive:
if (((pfds[i].dwFlags & pPFD->dwFlags) & pPFD->dwFlags) != pPFD->dwFlags)
This is a shorter code:
if ((pfds[i].dwFlags & pPFD->dwFlags) != pPFD->dwFlags)
This diagnostic also generates a warning when the label name begins with "case". A space character is most probably missing. For example, the label "case1:" should be written as "case 1:".
This diagnostic is classified as:
You can look at examples of errors detected by the V578 diagnostic.