c++ - 用C++编译器编译C99文件

标签 c++ c visual-studio compilation

在 google 或这里都没有找到我要问的确切问题,所有内容都在谈论想要从 c 代码调用 c++,或者某些部分用 c 编译器编译,其他部分用 c++ 编译,然后再链接在一起,以及那些问题源于我想要的东西。

我想在我所有的 C++ 应用程序中使用 Visual Studio 的 C++ 编译器编译和链接 C99 文件,并且能够在没有错误和问题的情况下调用 c 函数。将不涉及 c 链接器或使用不同的编译器编译某些部分和稍后链接在一起,或任何一种技巧。 header 来自 C 库 (libcurl) 和其他一些,因为我想在我的应用程序中使用它们。我不想使用 C++ 绑定(bind),我想将 C 代码编译为 C++。我可以相信 c 代码无需重大重构就可以编译为 C++ 代码吗?与包含 C++ header 时相比,有何不同之处?会出现什么不兼容性?

最佳答案

理论上,C代码应该可以编译成C++代码。在某些时候,Stroustrup 博士指出,K&R 的 ANSI C 版本的所有代码都使用 C++ 编译器编译,并且与使用 C 编译器编译的代码具有相同的语义(这被解释为所有 ANSI C 代码将是有效的 C++ 代码,但显然不是这种情况,例如,因为许多 C++ 关键字不是 C 中的保留标识符)。

但是,如果您想使用 C++ 编译器编译代码,C 中的某些习惯用法将需要对 C 代码进行大量更改。一个典型的例子就是需要投void*到 C++ 中的正确类型,这在 C 中不需要,并且似乎不赞成从 malloc() 转换结果到正确的指针类型,尽管其效果是它阻止了 C 代码被 C++ 编译器编译(在我看来这是一个很好的想法,例如,因为更严格的规则可能会导致发现 C 代码中的问题,即使生产版本正在使用 C 编译器进行编译)。据我所知,还有一些细微的语义差异,尽管现在我不能轻易指出其中之一。也就是说,用 C 和 C++ 编译器编译的相同代码可能定义了两种情况但不同的结果。

在实践中,我怀疑您是否可以使用 C++ 编译器简单地编译一段重要的 C 代码,并获得一个与原始 C 代码行为相同的程序。如果您设想用 C++ 编译的 C 程序带有一组完整的测试用例,则将代码移植到 C++ 可能是可行的,但它涉及的工作比仅仅从 <name>.c 重命名文件要多。至 <name>.cpp .我可以想象一个工具可以进行所需的转换(一个编译器将 C 源代码编译为 C++ 源代码),但我不知道有这样的工具。我只知道相反的方向会产生完全不可读的代码(例如 Comeau C++ 使用 C 作为可移植汇编程序的一种形式)。

关于c++ - 用C++编译器编译C99文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21120837/

相关文章:

c++ - 从管道读取时的随机字符

c - 查找字符数组的长度

arrays - VB.Net - Excel 应用程序获取显示范围的值

c++ - 轨迹插值和导数

c++ - 除了使用 inotify 之外如何递归监视目录

python - 我在哪里可以找到 Python 的 hash() 函数的源代码或算法?

java - char buf[] = "test"是否等同于 String buf = new String ("test")?

visual-studio - Visual Studio 展开/折叠键盘快捷键

c# - Visual Studio 搜索和替换行尾

c++ - 为什么返回对字符串文字的引用是对临时对象的引用?