我正在研究一个已经拼凑了20多年的大型软件项目(几百万行代码)。它是Fortran / C / C ++的混合体,目前针对的是Solaris&使用Sun Studio构建(虽然我可以在clang / gcc上编译它)。
我们正在将项目迁移到Linux / x86环境。我们面临的挑战之一是在项目中广泛传播了几千个位域。
目前的想法是或多或少地做这些事情:
1)无论是手动(ouch)还是通过某种重构工具(可能是用clang制作),都要更改所有位域定义以反转位域成员的顺序; e.g:
struct SomeStruct {
#if defined( BIG_ENDIAN )
int x1 : size1;
int x2 : size2;
/* ... */
#else
/* ... */
int x2 : size2;
int x1 : size1;
#endif
};
2)我们发送/接收这些位域的任何点我们都必须修复字节顺序。
从表面上看,这似乎是一个可以通行的(尽管不是完全可移植的)黑客攻击,但我对它非常谨慎:
如果我们已经不得不接触那么多代码以促进这一举动,我的直觉说我们应该花时间用更便携的东西替换它们,这些东西可以序列化/反序列化,所以位/字节顺序是某种东西通过API决定,而不是语言/编译器细微差别的函数。
我的问题是:位域合理的解决方案是什么?还有更好的解决方案吗? (请记住,这可能很容易触及30,000行代码或更多)
答案 0 :(得分:0)
我的方法是: