首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中使用为C生成的Linux头

在C++中使用为C生成的Linux头
EN

Stack Overflow用户
提问于 2016-07-30 00:18:53
回答 3查看 1.6K关注 0票数 5

让我们考虑一下这段代码:

代码语言:javascript
复制
#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.hstdio.h )。这算坏吗?不明确的行为会出现吗?C代码是否与C++“兼容”,所以我只包含它并使用它?

这个程序运行得很好。

代码语言:javascript
复制
Hello world!
Done
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-30 00:26:33

这算坏吗?

一些程序员认为,当有更好的C++库函数可用时,使用C库函数是不好的。但是,有些情况下最好使用C库函数。

不明确的行为会出现吗?

可能不会。C++标准库几乎包含了整个C标准库(只做了一些小改动),因此从C++调用C库函数是很好的定义。对于像write这样的函数,它们的行为由POSIX定义。

C代码是否与C++“兼容”,所以我只包含它并使用它?

对于标准C库标题,是的。对于实现头,通常是是的;它们的设计通常是为了有效地将它们包含到C++程序中。其他头像..。也许吧。并非所有C代码都是有效的C++,但兼容性很高。

票数 6
EN

Stack Overflow用户

发布于 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。

票数 0
EN

Stack Overflow用户

发布于 2016-07-30 00:25:41

欢庆,

是的,没问题。C++是C的超集,您可以轻松地将两者混合起来。事实上,许多老程序员(比如我)用C风格编写C++。在这种风格中,printf、strcpy、没有模板、RogueWave而不是stl等都与C++类一起使用。有时这被称为“C与类”。

-马特

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38669159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档