如果我有一个完全用C编写的代码,只使用C编写的库,并且我有一个编译器,比如GCC,支持许多平台,我可以确定这个代码将运行 any < / em>编译器支持的架构?例如,我可以使用Flex或CPython,编译并使用它,比方说,AVR?
修改
答案 0 :(得分:5)
不,没有看到你的代码就很难说。例如,如果你依赖于 long 是4个字节,那么它将不适合64位机器。
答案 1 :(得分:3)
应在您的方案中授予源代码可移植性和可编译性。
如果您使用依赖于特定操作系统的外部库或GUI框架,事情可能会发生变化,但这不是您的情况,您应该好好去。答案 2 :(得分:3)
“完全用C 编写”并不保证代码是可移植的。像GCC这样的可移植编译器会抽象出CPU架构的详细信息,但是当您使用特定于特定操作系统的系统调用时,除非将片段包围在#ifdef WHATEVER_OS
中,否则您的代码将变得不可移植。这就是出现像POSIX这样的标准来统一不同操作系统的系统调用接口的原因。
将代码限制为POSIX定义的系统调用并使用符合POSIX标准的操作系统通常可以避免担心,除了少数例外。
答案 3 :(得分:2)
回应是“他们可能会编译,但他们有可能无法运行”。问题是您可以使用的资源。假设您为2GB机器编程。你的程序会运行在256mb的机器上吗? DOS机器可以运行CPython吗?但他们可能会编译:-)(从技术上讲,你可能有一个程序(代码)太大而无法放入目标机器的地址空间。如果.exe / .out是18mb而目标机器有一个地址空间为16mb,你甚至无法编译)
答案 4 :(得分:2)
简单地使用C并不能保证代码可以移植到支持C的任何平台上。有一些陷阱可以插入陷阱,例如依赖于类型大小,字节序或未定义的行为。
实际上,一个非平凡的程序很少可移植到很多,除了你实际验证它运行的平台。但是你当然可以采取措施来减少问题的可能性。