有没有办法避免在使用-frtti
编译时为整个翻译单元或某个类生成typeinfo?
也许有一个魔术#pragma
或__attribute__
可以覆盖命令行选项?
提前致谢。
答案 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