【发布时间】:2019-05-22 14:11:07
【问题描述】:
我正在尝试使用一些遗留的 C89 代码,但在构建它时遇到了麻烦。我常用的环境是 Visual Studio,但它似乎只支持 C99,并且一些 C99 功能(例如 stdio 等不一定是恒定的)会破坏代码 - 很多。在我开始篡改代码之前,我想编写一些测试,这样我就不会破坏旧的行为,但可以说,在我可以构建代码之前,我无法测试这些测试。
那么还有什么办法可以在 Windows 上编译 C89 代码吗?
编辑:Steve Summit 已确定 stdio 等从未得到保证;它只是我的遗留代码碰巧依赖的一些编译器的一个特性,以一种相当深入的嵌入方式。所以我的问题转移到是否有任何 Windows C 编译器可用(最好是免费的!)支持该假设的 Windows。或者,我在虚拟机中安装了 Ubuntu,尽管我几乎没有使用它的经验 - Ubuntu 中有这样的编译器吗?
【问题讨论】:
-
您能否出示您遇到问题的 C89 minimal reproducible example?
-
如果有的话,那应该是相反的——VS 不完全支持 C99,所以它可能无法使用 C99 功能构建代码,但它应该在 C89 代码上坚如磐石。你得到什么构建错误?你确定它被编译为 C 而不是 C++?你确定你有你需要的所有代码吗?
-
MSVC 不是符合 C99 的编译器。它也不完全符合 C89,但它在这方面的偏差很小而且有些模糊。如果在 MSVS(在 C 模式,而不是 C++ 模式)中构建 puported-C89 代码失败或产生行为异常的可执行文件,那么很有可能是程序坏了,而不是编译器。
-
"比如stdio等不一定是恒定的"阙?
-
好消息:微软比市场上所有其他 C 编译器落后 20 年。他们仍然只部分支持 C99。他们的 C 编译器大多遵循 C90。坏消息:Visual C 不符合任何 C 标准。它被认为是一个 C++ 编译器,对 C 的支持有些草率,部分支持。