GCC C ++覆盖单个类的-frtti

时间:2016-03-28 11:40:14

标签: c++ gcc rtti

有没有办法避免在使用-frtti编译时为整个翻译单元或某个类生成typeinfo?

也许有一个魔术#pragma__attribute__可以覆盖命令行选项?

提前致谢。

1 个答案:

答案 0 :(得分:1)

对我来说,似乎没有可能的魔力。而且,对我来说,任何一种这样的魔法都会具有破坏性。

允许用户从内部代码中微调编译选项的唯一神奇的GCC编译指示是pragma GCC optimize

这个pragma在函数方面起作用,因为优化器本身在函数方面起作用,您可以很容易地看到它对类型的RTTI生成没有影响:

#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;
}

在GCC 5.2中,输出为:

X: 8 1X
Y: 8 1Y