07月
19
2025
0

跨平台C,C++代码注意的事项及如何编写跨平

跨平台,或者平台无关,是指程序代码在不同环境下具有完全相同的预期功能,可以互相替换。C语言的跨平台一般含义是:在指定的硬件和软件平台下能够正常编译的C语言源代码,在代码满足一定跨平台性的要求后,无需修改即可在另一硬件或软件下编译生成目标文件。这样,源代码是跨平台的。目标代码一般都是对应平台的本地代码,不能跨平台(例如.obj和.elf就不能直接混用;Windows和Linux上的可执行文件一般也不互相兼容)。C语言程序跨平台的实现必需编译环境的支持。对于库,提供源文件,或者提供不同平台下对应编译环境支持的目标文件(例如.lib/.a),可以实现跨平台开发。无法跨平台的部分,是平台相关的接口(例如一些操作系统API),库通过实现一定的兼容层可以克服平台障碍(前提是硬件支持)。注意C语言的标准库在任何支持相同版本标准上的平台上的行为都是一致的(除了标准定义implemention defined或者undefined的部分,这些部分应该尽量避免使用),是跨平台的;同其它跨平台库一样,是实现跨平台开发的有力用具。在Win/Linux下进行跨平台开发,编译器主要用GCC;可以使用经过配置的MinGW、Cygwin环境;跨平台GUI开发可以考虑wxWidgets等库。

至于Java,它事实上就是一个平台(JVM,Java虚拟机),所谓的“一次编译,到处执行”的跨平台支持是通过不同的Java编译器和JVM来实现的。Java程序的源代码和目标代码都可以跨平台。但是不同的JVM可能实现了不同的特定功能,基于特定功能的部分无法保证跨平台。此外,native的本机代码和JVM之外的平台相关,和C一样,也无法保证跨平台。