我正在使用MinGW的g ++测试我在网上发现的一些片段。这是C ++编译器...为什么它正确地编译C ....为什么人们交织在一起C和C ++。
具体问题是:是O.K.使用C和C ++并在g ++下编译。如果答案是肯定的,这将使我的生活变得轻松,因为我不必修改代码。
奇怪的是......让一些C ++工作,特别是在将字符串传递给ifstream构造函数时,它需要一个C类型的字符串......
我的猜测是,因为C ++依赖于C结构,有时将O.K写在一起。
但是,作为一种风格问题,您应该选择cout
/ cin
或printf
/ scanf
。
答案 0 :(得分:5)
有一些奇怪的地方需要char*
。您可以使用.c_str()
的{{1}}方法来弥补差距。
在大多数情况下,C ++的C子集是兼容的。在大多数情况下,它究竟是如何不兼容的并不重要:
http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
如果您正在C ++编译器下编译C代码片段,请务必将其更改为使用包含中的“c”lib格式...例如std::string
而不是#include <cstdio>
关于Bjarne自己为什么要避免使用scanf的一个相当合理的论点,请查看本文的开头:
http://www2.research.att.com/~bs/new_learning.pdf
使用iostreams代替printf也有很多好处:
答案 1 :(得分:3)
C ++语言从C继承了它的大部分核心功能。那是因为C ++是从C派生而来的.C ++标准包含了大部分C标准。因此,您可以使用C ++编译器使用C构造,习语和范例编写代码。这样做通常被称为使用C ++“作为更好的C。”
上述的长短是肯定的,你可以在C ++代码中使用printf
。标准明确允许这样做。
然而,这样做往往会忽略定义C ++的许多功能。我会把这个对话留给另一个问题但是足以说很多人会告诉你“不要那样做”或“那不是C ++”。这就说明了为什么你可能不想在C ++程序中使用printf
或者你想要的原因。但请放心,这在技术上是允许的。
答案 2 :(得分:2)
是O.K.使用C和C ++并在g ++下编译。
是的,可以将这两种语言混合使用。这对于以C开头的代码很常见,但随后又添加了越来越多的C ++特性(显然有人在此过程中改变了编译器)。
通常,C代码将使用C ++编译器进行编译和运行。有许多可能的例外情况,例如使用class
和virtual
等关键字来表示C代码中的事物名称,或C的宽松投射规则。
您经常会听到人们说“他们的语言非常不同”。这是因为您提出的任何编程问题可能会有不同的答案,具体取决于您尝试使用的语言。但是,还有很多相似之处和向后兼容性方面。
答案 3 :(得分:0)
如果您使用C ++,那么使用C ++。 (cin
,cout
)
为什么fstream
也会让c字符串困惑。