[previous] 0945 [next] [C99] WARNING. Operand of sizeof is an expression of variable length array type.
ISO C99 Language features REFERENCE - ISO:C99-6.5.3.4 The sizeof operator - Semantics

The sizeof operator has been applied to an operand of 'variable length array' type. QAC does not support the full semantic implications associated with this syntax and therefore analysis may have some unexpected results. Message 0945 is generated in order to warn about this limitation.

The result of the sizeof operator is normally a constant value (known at compile time). If the operand happens to be an expression, the expression is not evaluated.

In the special situation where the operand to sizeof is of variable length array type, there are 2 consequences:
  1. The result of the operation is no longer constant and can only be computed at run-time.
  2. The expression determining the size of the array is evaluated and in the process may generate side-effects.

For example:


/*PRQA S 702,1051,2017,2211,3196,3199,3203,3227,3408 ++*/

extern void foo(int n)
{
    int buf[n];
    unsigned long s;

    s = sizeof(buf);                    /* Message 0945 */
}


MISRA-C:2004 Rules applicable to message 0945:

Rule  1.1  (Required) All code shall conform to ISO/IEC 9899:1990 C programming language, ISO 9899, amended and corrected by ISO/IEC 9899/COR1:1995, ISO/IEC 9899/AMD1:1995, and ISO/IEC 9899/COR2: 1996192


QA·C Source Code Analyser 8.1
MISRA-C:2004 Compliance Module 3.2
© 2012 Programming Research.
www.programmingresearch.com
Personality Groups | Glossary | Message Index | MISRA-C:2004 Rule Index Contents