我们有一个学校项目,它要求我们的 C程序在Linux上运行并且与c99兼容。由于我在Windows 10上工作,我安装了Cygwin并假设它将在cygwin中编译,它肯定会在Linux中运行。它与windows工作正常,我试图在cygwin中编译它,它也可以工作。那么我可以保证它可以在Linux中运行并且兼容C99吗?如果不是,为什么不呢?我只使用stdio和stdlib
答案 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%,因为链接可能会让某些角落有些头疼。