MISRA C:2023 Rule 8.16
The alignment specification of zero should not appear in an object declaration
Since R2024a
Description
The alignment specification of zero should not appear in an object declaration1 .
Rationale
If the operand expr of _Alignas(expr) type var
evaluates to zero, the specifier has no effect on the alignment of the object
var.
If it is your intent to specify the alignment of an object, specify a non-zero value for
the operand of _Alignas. If you intend to disable the alignment
specification based on a condition such as platform implementation details, use preprocessor
directives to abstract this requirement.
For example, this code snippet illustrates how to specify an alignment on a Linux platform but disable the alignment specification on other platforms.
#ifdef __linux__
#define ALIGN_SPEC 16
#else
#define ALIGN_SPEC 0
#endif
#define ALIGNAS_PLATFORM(expr) _Alignas(expr)
void func() {
ALIGNAS_PLATFORM(ALIGN_SPEC) int conditionalAlignVar;
//...
}Polyspace Implementation
The coding rule checkers reports a violation on when you use
_Alignas(0) in a variable declaration.
Troubleshooting
If you expect a rule violation but do not see it, refer to Diagnose Why Coding Standard Violations Do Not Appear as Expected.
Examples
Check Information
| Group: Declarations and definitions |
| Category: Advisory |
| AGC Category: Advisory |
PQL Name: std.misra_c_2023.R8_16 |
Version History
Introduced in R2024a
See Also
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace® Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.