GCC C++ 为单个 class 覆盖 -frtti

GCC C++ override -frtti for single class

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

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

提前致谢。

对我来说,似乎没有可能的魔法。而且,在我看来,任何一种这样的魔法都会造成破坏。

唯一允许用户从代码内部微调编译选项的神奇 GCC pragma 是 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;
  // next line should *NOT* build/link if the pragma was taken into account
  std::cout << "Y: " << sizeof (Y) << " " << typeid(Y).name() << std::endl;
  return 0;
}

在 GCC 5.2 中,输出为:

X: 8 1X
Y: 8 1Y