Oracle Solaris Studio 12.2:C++ 用户指南

A.2.19 -filt[=filter[,filter...]]

控制编译器通常应用于链接程序和编译器错误消息的过滤功能。

A.2.19.1 值

filter 必须是下列值之一。

表 A–8 -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 都无效。也就是说,以下选项是相同的: