![]() |
1
2
只要您能保证完全相同的内存布局,包括偏移量,并且两个编译器之间的数据类型具有相同的大小,那么可以。因为在这一点上,结构与数据访问是相同的。 |
![]() |
2
1
是的,当然。我做过很多次了。无论是将混合代码编译并链接在一起,还是在计算机之间传输结构格式的数据,问题和解决方案都是相同的。 在过去糟糕的日子里,这经常发生在集成MS C和几乎任何其他东西时:Borland Turbo C.DEC VAX C,Greenhills C。
微软C是最烦人的。它的默认设置是将成员填充到16位对齐,可能更多的是使用64位代码。x86上的其他编译器不填充成员。
它看起来像是
还有一个编译器命令行选项来执行同样的操作。 |
![]() |
3
0
|
![]() |
4
0
确实有可能,您只需确保所有涉及的编译器都从同一代码生成相同的数据结构。一种测试方法是编写一个示例程序,该程序创建一个结构并将其写入二进制文件。在十六进制编辑器中打开结果文件并验证它们是否相同。或者,可以将结构转换为
确保数据大小相同的一种方法是使用如下数据类型
这不像听起来那么难。有许多预编译的库可以与多个编译器一起使用。关键是要构建一个测试程序,让您验证两个编译器对结构的处理是否相同。 |
![]() |
5
0
你是否把自己限制在那些编译器和相互兼容的
为了便于移植,您最好放弃
|