Sun Studio 12 Update 1: C++ ユーザーズガイド

A.2.20.1 値

filter は次の値のいずれかである必要があります。

表 A–9 -filt の値

値 

意味  

[no%]errors

C++ のリンカーエラーメッセージの説明を表示します [しません]。説明の抑止は、リンカーの診断を別のツールに直接提供している場合に便利です。 

[no%]names

C++ で符号化されたリンカー名を復号化します [しません]。 

[no%]returns

関数の戻り型を復号化します [しません]。この種の復号化を抑止すると、より迅速に関数名が識別しやすくなりますが、共有の不変式の戻り値の場合、一部の関数は戻り型でのみ異なることに注意してください。 

[no%]stdlib

リンカーとコンパイラの両方のエラーメッセージに出力される標準ライブラリからの名前を簡略化します。この結果、標準ライブラリテンプレート型の名前を容易に認識できるようになります。 

%all

-filt=errors,names,returns,stdlib に相当します。これはデフォルトの動作です。

%none

-filt=no%errors,no%names,no%returns,no%stdlib に相当します。

デフォルト

-filt オプションを指定しないで、または値を入れないで -filt を指定すると、コンパイラでは -filt=%all が使用されます。

次の例では、このコードを -filt オプションでコンパイルしたときの影響を示します。


// filt_demo.cc
class type {
public:
    virtual ~type(); // no definition provided
};

int main()
{
    type t;
}

-filt オプションを指定しないでコードをコンパイルすると、コンパイラでは -filt=errors,names,returns,stdlib が使用され、標準出力が表示されます。


example% CC filt_demo.cc
Undefined             first referenced
 symbol                  in file
type::~type()         filt_demo.o
type::__vtbl          filt_demo.o
[Hint: try checking whether the first non-inlined, /
non-pure virtual function of class type is defined]

ld: fatal: Symbol referencing errors. No output written to a.out

次のコマンドでは、C++ で符号化されたリンカー名の復号化が抑止され、C++ のリンカーエラーの説明が抑止されます。


example% CC -filt=no%names,no%errors filt_demo.cc
Undefined                       first referenced
 symbol                             in file
__1cEtype2T6M_v_                    filt_demo.o
__1cEtypeG__vtbl_                   filt_demo.o
ld: fatal: Symbol referencing errors. No output written to a.out

次のコードについて考えてみましょう。


#include <string>
#include <list>
int main()
{
    std::list<int> l;
    std::string s(l); // error here
}

次は、-filt=no%stdlib を指定したときの出力です。


Error: Cannot use std::list<int, std::allocator<int>> to initialize
std::basic_string<char, std::char_traits<char>,
std::allocator<char>>.

次は、-filt=stdlib を指定したときの出力です。


Error: Cannot use std::list<int> to initialize std::string .

相互の関連性

no%names を使用しても returnsno%returns に影響はありません。つまり、次のオプションは同じ効果を持ちます。