我正在开发一个遗留项目,其中包含大量可追溯到OS X之前的文件。它的数据已经16位对齐> 15年。我想转向完整的LLVM编译,但我似乎无法使2字节对齐工作。是否有适用于此的编译器级别选项? (以前使用-malign-mac68k)
我知道这里的#pragma pack(2)选项。但是,这需要我修改超过1000个源文件以包含此文件。这是一个最糟糕的选择,但它似乎是一个黑客。此外,如果可以,那么肯定有一个默认选项来设置对齐吗?
答案 0 :(得分:8)
根据clang的消息来源,它确实支持mac68k对齐规则。现在似乎只能通过“#pragma options align = mac68k”启用它。如果你对小铿锵黑客没问题,那么你也可以实现cmdline选项并将补丁提交给clang。
答案 1 :(得分:2)
我建议您查看#pragma pack
(请参阅http://msdn.microsoft.com/en-us/library/2e70t5y1%28v=vs.80%29.aspx和http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html)。它相对容易使用,并且可以与任何Apple编译器一起使用。
答案 2 :(得分:0)
我在ibm的人员编写的osx上使用最新的gcc / gortran,如果你阅读了gcc手册,那么至少有8种不同的对齐优化可以考虑不仅仅是大量的恶意
答案 3 :(得分:-1)
由于系统级标头采用默认对齐方式(在大多数情况下它们没有覆盖对齐的指令),因此更改所有内容的对齐方式将破坏OS调用。因此,您不希望这样做。
只需编写脚本即可将#pragma pack(2)
应用于相关的源文件,避免使用#include
。它相对容易,不太可能引起不幸的副作用。