Cygwin:Windows上的Linux?如何确保在Windows中创建的程序适用于Linux

时间:2016-09-12 12:04:31

标签: c linux windows cygwin

我们有一个学校项目,它要求我们的 C程序在Linux上运行并且与c99兼容。由于我在Windows 10上工作,我安装了Cygwin并假设它将在cygwin中编译,它肯定会在Linux中运行。它与windows工作正常,我试图在cygwin中编译它,它也可以工作。那么我可以保证它可以在Linux中运行并且兼容C99吗?如果不是,为什么不呢?我只使用stdio和stdlib

2 个答案:

答案 0 :(得分:2)

你永远不能确定。即使你的程序似乎工作,它仍然可能包含调用未定义行为的错误。

但是,您可以通过使用最佳做法来降低故障风险,例如:

注意编译器警告

打开编译器警告。例如:

gcc -Wall -Wextra -pedantic -std=c99

这会将警告级别提升到相当高的水平。 。编译器警告通常表示存在错误,因此请将其全部修复。为确保您能够修复它们,请添加-Werror,这样您就无法运行代码,直到所有警告都得到修复。

-std=c99告诉编译器使用C标准C99版本的规则。当前版本为C11(-stdc11)。这是一个重要的标志,如果省略gcc,则默认使用较旧的C89标准。

使用工具检测无效的内存使用

像Valgrind(linux)这样的工具会报告常见的内存错误,如缓冲区溢出和内存泄漏。不确定Windows中最常使用的工具,但列出的选项范围很广here

答案 1 :(得分:0)

如果它是vanilla C99,如果在Cygwin上工作则为99.9%,它可以在任何Linux上运行。我从来没有看到一个无效的案例。

反向并不总是正确的,我估计~98%,因为链接可能会让某些角落有些头疼。