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