C++ 使用gcc插件修改变量声明的顺序

C++ 使用gcc插件修改变量声明的顺序,c++,gcc,g++,gcc-plugins,gimple,C++,Gcc,G++,Gcc Plugins,Gimple,我知道这很难做到,我应该避免,但我有我的理由。 我想修改一些字段声明在编译时的顺序,例如: class A { char c; int i; } 必须转向: class A { int i; char c; } 如果我选择交换I和c的顺序, 我想知道如何更改具有树的字段声明的位置 有人知道我该怎么做吗?? 谢谢 我使用g++4.9.2版本的插件如果我要尝试这个,我会尝试两种不同的方法 钩住插件\u完成\u类型事件并在那里重写类型。要重写它,请对字段重新排序并强

我知道这很难做到,我应该避免,但我有我的理由。 我想修改一些字段声明在编译时的顺序,例如:

class A {
  char c;
  int i;
}
必须转向:

class A {
      int i;
      char c;
}
如果我选择交换
I
c
的顺序, 我想知道如何更改具有
树的字段声明的
位置

有人知道我该怎么做吗?? 谢谢


我使用g++4.9.2版本的插件

如果我要尝试这个,我会尝试两种不同的方法

  • 钩住
    插件\u完成\u类型
    事件并在那里重写类型。要重写它,请对字段重新排序并强制重新显示该类型。您必须阅读一些GCC源代码,以了解如何使布局无效并强制使用新布局

  • 如果这不起作用,添加一个在GIMPLIZATION之后运行的新过程,并尝试在那里重写类型。不过,我怀疑这不太可能奏效

  • 钩住PLUGIN_FINISH_TYPE事件并在那里重写类型。要重写它,请对字段重新排序并强制重新显示该类型。您必须阅读一些GCC源代码,以了解如何使布局无效并强制使用新布局
  • 这是在linux内核中实现的


    此解决方案可以工作,但它会破坏dwarf调试信息。事实上,在调试信息中,成员的顺序与源代码中最初定义的顺序相同,但结构在二进制文件中进行了很好的洗牌。

    您能将变量封装到类中吗?我想给变量一个我自己的顺序,也许我不是很清楚,我想写一个gcc插件:如果你想了解更多关于gcc插件的信息。该插件允许我更改变量声明的顺序。