C and C++


LANG.STRUCT.ALIGNAS.TMAS : Too Many Alignment Specifiers

要旨

A declaration of an object (variable or field) has more than one alignas specification. This includes the case where there are multiple specifications with the same alignment value.

This class is a strict subset of Use of Alignas.

See also Inconsistent Alignment Specifications.

プロパティ

クラス名 Too Many Alignment Specifiers
日本語クラス名 Too Many Alignment Specifiers
クラス分類 スタイル (style)
ニーモニック LANG.STRUCT.ALIGNAS.TMAS
カテゴリー
MisraC2023 MisraC2023:1.4 Emergent language features shall not be used
  MisraC2023:8.17 At most one explicit alignment specifier should appear in an object declaration
Misra2012 Misra2012:1.4 Emergent language features shall not be used
  Misra2012:8.17 At most one explicit alignment specifier should appear in an object declaration
CERT-C CERT-C:MSC23-C Beware of vendor-specific library and language differences
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Too Many Alignment Specifiers"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

/* LANG.STRUCT.ALIGNAS.TMAS.c */

#include "LANG.STRUCT.ALIGNAS.TMAS.h"

alignas(8) int hc;                              /* ok: one alignment specifier
                                                 * - specifier in .c file is in a different declaration
                                                 * ('Use of Alignas' warning issued when enabled)
                                                 */
int hc_none;                                    /* ok: no alignment specifiers */
/* LANG.STRUCT.ALIGNAS.TMAS.h */

#include <stdalign.h>

extern alignas(8) int hc_same;                  /* ok: one alignment specifier
                                                 * - specifier in .c file is in a different declaration
                                                 * ('Use of Alignas' warning issued when enabled)
                                                 */
extern int hc_none;                             /* ok: no alignment specifiers */

extern alignas(4) int h_single;                 /* ok: only one alignment specifier
                                                 * ('Use of Alignas' warning issued when enabled)
                                                 */
extern alignas(4) alignas(4) int h_same; /* 'Too Many Alignment Specifiers' warning issued here
                                          * ('Use of Alignas' warnings also issued when enabled)
                                          */
extern alignas(4) alignas(8) int h_diff; /* 'Too Many Alignment Specifiers' warning issued here
                                          * ('Inconsistent Alignment Specifications' and 'Use of Alignas'
                                          * warnings also issued when enabled)
                                          */

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。