メインコンテンツ

MISRA C:2023 Rule 5.6

A typedef name shall be a unique identifier

R2024a 以降

説明

ルール定義

A typedef name shall be a unique identifier 1 .

根拠

typedef 名を別の typedef または関数、オブジェクトまたは enum 定数の名前として再利用すると開発者が混乱する可能性があります。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

void func ( void ){
  {
    typedef unsigned char u8_t;
  }
  {
    typedef unsigned char u8_t; /* Non-compliant */
  }
}

typedef float mass;
void func1 ( void ){
  float mass = 0.0f;            /* Non-compliant */
}

この例では、typedefu8_t が 2 回使用されています。また、typedefmass は識別子名としても使用されています。

typedef struct list{          /* Compliant - exception */				
  struct list *next;
  unsigned short element;
} list;												

typedef struct{
  struct chain{               /* Non-compliant */	
    struct chain *list2;
    unsigned short element;
  } s1;
  unsigned short length;
} chain;

この例では、typedefliststruct 型の元の名前と同じになっています。ルールでは、この例外的ケースは許可されます。

一方、typedefchainstruct 型の元の名前と同じではありません。名前 chain は別の struct 型に関連付けられています。そのため、typedef 名と競合します。

チェック情報

グループ: 識別子
カテゴリ: 必要
AGC カテゴリ: 必要

バージョン履歴

R2024a で導入


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.