メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

CERT C: Rec.INT09-C

列挙定数は必ず一意値にマッピングされるようにする

説明

ルール定義

列挙定数は必ず一意値にマッピングされるようにします。1

Polyspace 実装

ルール チェッカーは、"同じ値への列挙定数のマッピング" をチェックします。

すべて展開する

問題

この問題は、列挙子リスト内で、暗黙的に指定された列挙定数の値が一意でない場合に発生します。

ルール チェッカーは、別の列挙定数と同じ値である暗黙的に指定された列挙定数が列挙内にある場合、その列挙にフラグを設定します。

リスク

暗黙的に指定された列挙定数は先行する列挙定数に 1 を加えた値をもちます。最初の列挙定数が暗黙的に指定されている場合、その値は 0 です。明示的に指定された列挙定数は指定した値となります。

暗黙的に指定された定数と明示的に指定された定数が列挙子リスト内で混在する場合、プログラムは値を複製できます。そのような複製は意図されていない可能性があり、予期しない動作を引き起こす可能性があります。

例 - 暗黙的に指定された列挙定数の値の複製
enum color1 {red_1, blue_1, green_1};   /* Compliant */
enum color2 {red_2 = 1, blue_2 = 2, green_2 = 3};       /* Compliant */
enum color3 {red_3 = 1, blue_3, green_3};     /* Compliant */
enum color4 {red_4, blue_4, green_4 = 1};     /* Non Compliant */
enum color5 {red_5 = 2, blue_5, green_5 = 2};     /* Compliant */
enum color6 {red_6 = 2, blue_6, green_6 = 2, yellow_6};     /* Non Compliant */

準拠している状況:

  • color1:すべての定数が暗黙的に指定されている。

  • color2:すべての定数が明示的に指定されている。

  • color3:暗黙的な指定と明示的な指定が混在しているが、すべての定数が一意の値である。

  • color5:暗黙的に指定された定数が一意の値である。

準拠していない状況:

  • color4:暗黙的に指定された定数 blue_4green_4 と同じ値である。

  • color6:暗黙的に指定された定数 blue_6yellow_6 と同じ値である。

チェック情報

グループ: Rec.04.整数 (INT)

バージョン履歴

R2019a で導入


1 This software has been created by MathWorks incorporating portions of: the “SEI CERT-C Website,” © 2017 Carnegie Mellon University, the SEI CERT-C++ Web site © 2017 Carnegie Mellon University, ”SEI CERT C Coding Standard – Rules for Developing safe, Reliable and Secure systems – 2016 Edition,” © 2016 Carnegie Mellon University, and “SEI CERT C++ Coding Standard – Rules for Developing safe, Reliable and Secure systems in C++ – 2016 Edition” © 2016 Carnegie Mellon University, with special permission from its Software Engineering Institute.

ANY MATERIAL OF CARNEGIE MELLON UNIVERSITY AND/OR ITS SOFTWARE ENGINEERING INSTITUTE CONTAINED HEREIN IS FURNISHED ON AN "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY KIND, EITHER EXPRESSED OR IMPLIED, AS TO ANY MATTER INCLUDING, BUT NOT LIMITED TO, WARRANTY OF FITNESS FOR PURPOSE OR MERCHANTABILITY, EXCLUSIVITY, OR RESULTS OBTAINED FROM USE OF THE MATERIAL. CARNEGIE MELLON UNIVERSITY DOES NOT MAKE ANY WARRANTY OF ANY KIND WITH RESPECT TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT.

This software and associated documentation has not been reviewed nor is it endorsed by Carnegie Mellon University or its Software Engineering Institute.