sizeof のオペランドに含まれる式が冗長です
sizeof
オペランドに評価されない式が含まれている
説明
この欠陥は、sizeof
オペランドに、評価が sizeof
結果に影響しない式が含まれている場合に発生します。sizeof
オペランド内の現在の式の代わりに、データ型、変数、またはより単純な式を使用することもできます。これによって、機能性が失われることはありません。
リスク
この欠陥によってフラグが設定された場合は、sizeof
オペランド内の式が必要以上に複雑になって、コードの可読性が低下し、保守性コストが増加します。式が、sizeof
オペランドの結果に関する誤った印象を与える可能性もあります。
たとえば、次の式を考えてみましょう。
sizeof(void (*[n])(int arr[U+V]))
sizeof
のオペランドは、それぞれの型が void () (int*)
の n
関数ポインターの配列です。評価されない追加の U+V
は、式全体を必要以上に複雑にします。また、式が、サイズ U+V
の配列である関数ポインター引数が sizeof
の結果にとって重要であるという誤った印象を与えることにもなります。修正方法
欠陥トレースバック内の最初のイベントは、sizeof
オペランドの冗長な部分式が始まることを示しています。
冗長な式を単純化するか、完全に削除します。可能な場合は、データ型を sizeof
オペランドとして使用します。たとえば、前述の例では、より単純で等価の sizeof
演算が次のようになります。
sizeof(void (*[n])(int*))
式を評価するには、別のステートメントで評価を実行します。
例
結果情報
グループ: 適切な手法 |
言語: C | C++ |
既定値: オフ |
コマンド ライン構文: SIZEOF_USELESS_OP |
影響度: Low |
バージョン履歴
R2020a で導入