让我们考虑一下这段代码:
#include <iostream>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
using namespace std;
int main(void) {
char hi[14] = "Hello world!\n";
if (write(1, hi, strlen(hi)) < 0) {
perror("write");
}
cout << "Done" << endl;
return 0;
}在这里,我混合了各种C和C++代码,使某些东西.工作。我直接在stdout上写作,并使用一些C头(如string.h和stdio.h )。这算坏吗?不明确的行为会出现吗?C代码是否与C++“兼容”,所以我只包含它并使用它?
这个程序运行得很好。
Hello world!
Done发布于 2016-07-30 00:26:33
这算坏吗?
一些程序员认为,当有更好的C++库函数可用时,使用C库函数是不好的。但是,有些情况下最好使用C库函数。
不明确的行为会出现吗?
可能不会。C++标准库几乎包含了整个C标准库(只做了一些小改动),因此从C++调用C库函数是很好的定义。对于像write这样的函数,它们的行为由POSIX定义。
C代码是否与C++“兼容”,所以我只包含它并使用它?
对于标准C库标题,是的。对于实现头,通常是是的;它们的设计通常是为了有效地将它们包含到C++程序中。其他头像..。也许吧。并非所有C代码都是有效的C++,但兼容性很高。
发布于 2016-07-30 01:46:04
C++在很长一段时间内都是从C语言中分离出来的,这两种语言是独立进化的。
C++标准描述了相对于它派生的C标准C++引入的故意不兼容:http://eel.is/c++draft/diff.iso。
人们犯的错误是认为这是一个完整的区别清单。C本身已经发生了变化,虽然C99的一些部分已经包含在C++的最新版本中,但并不是所有的版本都有(VLA、灵活的数组成员、复合文本、.)。
C11使差距更大,从删除gets (仍然包含在C++17中)到边界检查接口、线程支持以及_the Static_assert关键字等c++特性的c变体。
因此,在大多数情况下,您可以在C++程序中使用旧的C-ish代码,一些会导致编译器错误的小更改,一些可能不会发生的更改,以及近20年来只有部分可访问性的C进步。
如果您真的想编写类似C的代码,请考虑编写C代码,并利用该语言提供的全套语言改进。其结果将是更高质量的代码,而不是垃圾,你将自己限制在C ++的子集C。
发布于 2016-07-30 00:25:41
欢庆,
是的,没问题。C++是C的超集,您可以轻松地将两者混合起来。事实上,许多老程序员(比如我)用C风格编写C++。在这种风格中,printf、strcpy、没有模板、RogueWave而不是stl等都与C++类一起使用。有时这被称为“C与类”。
-马特
https://stackoverflow.com/questions/38669159
复制相似问题