![]() |
![]() |
3237 | ![]() |
||||
![]() | |||||||
| Constraint violations | REFERENCE - ISO:C99-6.7.4 Function specifiers - Constraints | ||||||
An inline function with external linkage is defining an object with static storage duration. If this is an external definition of the function, and the object is modifiable, this amounts to a constraint error. If it is simply an inline definition of the function, the resulting behaviour can be unspecified (even if the object is non-modifiable), because there is no guarantee that the inline definition will be used rather than an external definition of the function in another translation unit. Defining an inline function with external linkage is always dangerous and it is recommended that inline should only be used on functions which are declared static. For example:
/*PRQA S 1055,2017,3132,3203,3227,3602 ++*/
inline void f(int n) /* 3240 */
{
static const int a[5] = {10, 20, 30, 40, 50}; /* 3237 */
static int b[5]; /* 3237 */
int c[5]; /* OK */
if (n > a[n])
{
b[n] = n;
c[n] = n;
}
return;
}
MISRA-C:2004 Rules applicable to message 3237:
| 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 |