C and C++


LANG.STRUCT.USING.MDECL : 誤った位置のUsing宣言

要旨

Using宣言が、その後に再度宣言される名前空間を指しています。

プロパティ

クラス名 Misplaced Using Declaration
日本語クラス名 誤った位置のUsing宣言
クラス分類 スタイル (style)
ニーモニック LANG.STRUCT.USING.MDECL
カテゴリー
AUTOSARC++14 AUTOSARC++14:A7-3-1 All overloads of a function shall be visible from where it is called.
MisraC++2008 MisraC++2008:7-3-5 Multiple declarations for an identifier in the same namespace shall not straddle a using-declaration for that identifier.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Misplaced Using Declaration"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

#include "stdio.h"

namespace MYNS {
  int myfunc(long int n) {return 5;}
}

using MYNS::myfunc;  // 'Misplaced Using Declaration' warning issued here

namespace MYNS {
  int myfunc(int n) {return 0;}

  int caller1(void){
     return myfunc(1);
  }
}

// this is a better location for the using declaration

namespace MYOTHERNS {
  int caller2(void){
    return myfunc(2);
 }
}

int caller3(void){
  return myfunc(3);
}

int main(void){
  printf("%d\n", MYNS::caller1());           // prints 0
  printf("%d\n", MYOTHERNS::caller2());      // prints 5
  printf("%d\n", caller3());                 // prints 5

  return 0;
}

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

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