メインコンテンツ

MISRA C:2023 Rule 17.13

A function type shall not be type qualified

R2024a 以降

説明

ルール定義

A function type shall not be type qualified 1 .

根拠

関数タイプの指定に型修飾子が含まれている場合、その動作は未定義になります。

Polyspace 実装

typedef ステートメントで作成される新しいタイプが、constvolatilerestrict_Atomic のいずれかで修飾されている関数タイプの場合、ルール チェッカーは違反を報告します。

トラブルシューティング

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

すべて展開する

この例では、最初の typedef ステートメントで関数タイプ functionType を定義しています。この定義された関数タイプが、以降の typedef ステートメントで新しいタイプを定義するために使用されます。

  • 2 番目の typedef ステートメントでは基本的に関数タイプ functionType であるタイプを定義していますが、これは const で修飾されているため、このルールに違反します。

  • 3 番目の typedef ステートメントでは、関数タイプ functionType に別のエイリアスを定義しているだけなので、このルールに準拠しています。

  • 4 番目の typedef ステートメントでは、関数タイプ functionType を指す、const で修飾したポインターであるタイプを定義しているため、同じくルールに準拠しています。

#include <stdint.h>

typedef uint16_t functionType (void);
typedef const functionType aFunctionType;             //Noncompliant
typedef functionType anotherFunctionType;             //Compliant
typedef functionType * const pointerToFunctionType;   //Compliant

チェック情報

グループ: 関数
カテゴリ: 必要
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.