[previous] 3416 [next] Logical operation performed on expression with possible side effects.
Side Effects REFERENCE - ISO:C90-5,1,2,3 Program Execution

An explicit or implicit logical operation is being performed on an expression which may generate side effects.

Side effects occur when an expression:

However QA·C assumes that side effects occur whenever a function is called, unless the function has specifically been identified as being free from side effects by a #pragma statement of the form:
#pragma PRQA_NO_SIDE_EFFECTS funcname

Message 3416 is generated when an expression which may generate side effects is used as:

For example:


/*PRQA S 506,2213,3198,3199,3203,3227,3314,3344,3398,3399,3408,3442,3447,3602,4108,4110 ++*/

extern          int i;
extern          int j;
extern          int k;
extern volatile int v;

extern int fi(int p);

extern void foo(int n)
{
    int r;

    r = (i = j) != k;                   /* Message 3416 + 3326 */
    r = (i = j) <  k;                   /* Message 3416 + 3326 */
    r = (i = j) && k;                   /* Message 3416 + 3326 */
    r = !(i = j);                       /* Message 3416 + 3326 */
    r = (i = j) ? j : k;                /* Message 3416 + 3326 */
    if (i = j) { }                      /* Message 3416 + 3326 */

    r = ++i == k;                       /* Message 3416 + 3440 */
    r = ++i >  k;                       /* Message 3416 + 3440 */
    r = ++i || k;                       /* Message 3416 + 3440 */
    r = ++i ? j : k;                    /* Message 3416 + 3440 */
    if (++i) { }                        /* Message 3416 + 3440 */

    r = fi(n) != k;                     /* Message 3416        */
    r = fi(n) <= k;                     /* Message 3416        */
    r = fi(n) && k;                     /* Message 3416        */
    if (fi(n)) { }                      /* Message 3416        */

    r = v == k;                         /* Message 3416        */
    r = v >= k;                         /* Message 3416        */
    r = v && k;                         /* Message 3416        */
    r = !v;                             /* Message 3416        */
    r = v ? j : k;                      /* Message 3416        */
    if (v) { }                          /* Message 3416        */
}

See also:

QA·C Source Code Analyser 8.1.2
© 2013 Programming Research.
www.programmingresearch.com
Personality Groups | Glossary | Message Index Contents