2016-03-28 19 views
1

-frttiでコンパイルすると、翻訳単位全体または一部のクラスに対してtypeinfoが生成されないようにする方法はありますか?GCC C++ override -frtti for single class

おそらく、コマンドラインオプションを無効にできる魔法の#pragmaまたは__attribute__がありますか?

ありがとうございます。

答えて

1

私にとっては魔法はないと思われます。さらに、そのような魔法のどんな種類も破壊的であると私には思われます。

コンパイルオプションを内部コードから微調整できる唯一の魔法のGCCプラグマはpragma GCC optimizeです。

オプティマイザ自体は機能ごとに動作し、あなたが簡単にそれがタイプについてRTTI生成に影響を与えないことを、見ることができるので、このプラグマは、機能単位で動作します:GCC 5.2で

#include <iostream> 
#include <typeinfo> 

struct X 
{ 
    virtual int foo() {return 0;} 
}; 

#pragma GCC optimize ("no-rtti") 

struct Y 
{ 
    virtual int foo() {return 0;} 
}; 

#pragma GCC reset_options 

int 
main() 
{ 
    std::cout << "X: " << sizeof (X) << " " << typeid(X).name() << std::endl; 
    std::cout << "Y: " << sizeof (Y) << " " << typeid(Y).name() << std::endl; 
    return 0; 
} 

、出力は次のとおりです。

X: 8 1X 
Y: 8 1Y