1

PC-Lint (au-misra-cpp.lnt) で次のエラーが発生します。

エラー 1960: (注 -- MISRA C++ 2008 Required Rule 5-2-12、ポインタを期待する関数に渡された配列型に違反しています)

このコードで:

_IDs["key"] = "value";

_IDs は次のように宣言されます。

std::map<std::string,std::string> _IDs;

また、次のように変更しようとしました:

_IDs.insert("key","value");

しかし、同じエラーが発生します。

コードをミスラに準拠させるにはどうすればよいですか?

4

2 に答える 2

3
// a template function that takes an array of char 
//  and returns a std::string constructed from it
//
// This function safely 'converts' the array to a pointer
//  to it's first element, just like the compiler would
//  normally do, but this should avoid diagnostic messages
//  from very restrictive lint settings that don't approve
//  of passing arrays to functions that expect pointers.
template <typename T, size_t N>
std::string str( T (&arr)[N])
{
    return std::string(&arr[0]);
}

上記のテンプレート関数を使用すると、次のようにリンターを通過できるはずです。

_IDs[str("key")] = str("value");

余談ですが、リントが_IDs予約名であると文句を言っていないことに驚いています.CまたはC ++では、特に大文字と一緒に使用する場合は、先頭にアンダースコアを付けないでください。

于 2013-05-31T09:12:27.180 に答える