gpt4 book ai didi

c++ - 使用 C++ 编译器编译 C 代码会出现什么问题?

转载 作者:IT老高 更新时间:2023-10-28 12:35:28 26 4
gpt4 key购买 nike

如果您使用现有的 C 代码库并使用 C++ 编译器对其进行编译,您会遇到什么样的问题?例如,我认为将整数分配给具有枚举类型的值在 C++ 中会失败,而在 C 中它是合法的(如果有点讨厌)。

如果我不将我所有的 C 文件包装在 extern C { ... } 中,我会在我最不期望的地方进行名称修改吗?我真的不应该这样做吗?

作为背景,我们有一个用 C 编写的非常大的代码库。几年来,我们一直在跳槽做一些通过 C++ 很自然的事情(例如,自制继承)。我们想开始转向 C++,但要循序渐进;让我们的类似 CORBA 的框架支持它,并在我们进行过程中重构模块以利用 C++ 提供的更自然的方法。

最佳答案

我曾经做过这样的事情。正如您所怀疑的那样,问题的主要来源是 C++ 对类型更加严格。您必须在 void* 与其他类型的指针混合的地方添加强制转换。比如分配内存:

Foo *foo;
foo = malloc(sizeof(*foo));

以上是典型的 C 代码,但需要在 C++ 中进行转换:

Foo *foo;
foo = (Foo*)malloc(sizeof(*foo));

C++中有新的保留字,如“class”、“and”、“bool”、“catch”、“delete”、“explicit”、“mutable”、“namespace”、“new”、“operator”、“or”、“private”、“protected”、“friend”等。例如,这些不能用作变量名。

上述问题可能是使用 C++ 编译器编译旧 C 代码时最常见的问题。有关不兼容性的完整列表,请参阅 Incompatibilities Between ISO C and ISO C++ .

您还询问有关名称修改的问题。在没有 extern "C"包装器的情况下,C++ 编译器 会破坏符号。只要您使用 only 一个 C++ 编译器,并且不依赖 dlsym() 或类似的东西从库中提取符号,这不是问题。

关于c++ - 使用 C++ 编译器编译 C 代码会出现什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/861517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com