2016-03-28 3 views
1

Есть ли способ избежать генерации типаinfo для всей единицы перевода или какого-либо класса, когда он скомпилирован с -frtti?GCC C++ override -frtti для одного класса

Возможно, есть волшебство #pragma или __attribute__, которое может переопределить параметр командной строки?

Заранее спасибо.

ответ

1

Мне кажется, что нет возможности магии. Более того, мне кажется, что любая такая магия будет разрушительной.

Единственная волшебная прагма GCC, которая позволяет пользователю точно настраивать параметры компиляции из внутреннего кода: pragma GCC optimize.

Прагма работает функция мудр, потому что сам оптимизатор работает функция мудр, и вы можете легко увидеть, что он не оказывает никакого влияния на генерации 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 
Смежные вопросы