![]() |
1
246
什么
代码内部
现在,特别是关于编号问题:
关于1:35; cplusplus将在
关于α2:对于编译通过C++编译器运行的任何编译单元,将定义通常,这意味着.cpp文件和该.cpp文件包含的任何文件。相同的。如果不同的编译单元包含H(OR,H.O.HPP或你们有什么),它们可以在不同的时间被解释为C或C++。如果希望.h文件中的原型引用C符号名,则它们必须
为了回答你的问题,3:没有原型的函数如果在.CPP文件中,而不是在一个
对于4,你已经完全掌握了。如果包含具有C链接的代码的头(例如由C编译器编译的代码),则必须
5:这种混合是使用的常见原因
|
![]() |
2
37
|
![]() |
3
20
两个戈查斯是安德鲁·谢尔兰斯基优秀答案的讨论对象,他们有点不同意 不会真正改变编译器读取代码的方式 因为函数原型被编译为C,所以不能用不同的参数重载相同的函数名——这是编译器名称管理的关键特性之一。它被描述为一个链接问题,但这并不完全正确——您将从编译器和链接器中得到错误。 编译器错误将是如果你尝试使用C++特性的原型声明,比如重载。 链接器错误将在稍后发生,因为如果您这样做,您的函数似乎找不到。 不 拥有 外部“C” 围绕报文包装,报头包含在C和C++源的混合中。 阻止人们使用 C编译为C++ 设置是因为这意味着它们的源代码不再是可移植的。该设置是一个项目设置,因此如果将.c文件放到另一个项目中,它将不会被编译为C++。我希望人们花时间将文件后缀重命名为.cpp。 |
![]() |
4
2
它是关于ABI的,为了让C和C++应用都使用C接口而没有任何问题。 由于C语言非常简单,对于不同的编译器,如GCC、Borland C++、MSVC等,代码生成稳定多年。 当C++变得越来越流行时,必须在新的C++域中添加很多东西(例如,由于c++不能覆盖它所需要的所有特征,所以cAdvin在AT&AMT上被放弃了)。例如 模板 特点和编译时代码生成,从过去,不同的编译器厂商实际完成了C++编译器和链接器的实际实现,实际的ABIS根本不兼容于不同平台上的C++程序。 人们可能仍然喜欢在C++中实现实际的程序,但仍然像以前一样保持旧的C接口和ABI,头文件必须声明。 外部“C” ,它告诉编译器 为接口函数生成兼容的/old/simple/easy c abi 如果编译器是C编译器,而不是C++编译器。 |