首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++20标准是否包括C18标准?

C++20标准是否包括C18标准?
EN

Stack Overflow用户
提问于 2020-03-05 11:08:34
回答 3查看 714关注 0票数 1

我试着在openstd上搜索"C18“和”C18“的最新草稿。C++标准是否支持C的最新标准?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-05 14:31:49

C++ (任何版本)不包括C(任何版本)批发。它只是根据需要引用C规范的部分内容。例如,C++包含(大部分)C标准库,它是通过引用C标准的适当部分来实现的,而不是从C标准中复制。

当C++20引用C规范的一个版本时,它引用了C18。

票数 2
EN

Stack Overflow用户

发布于 2020-03-05 11:57:01

C++是一种基于ISO/IEC9899:2018编程语言(以下简称C标准)所描述的基于C语言的通用编程语言。 C++提供了许多超出C提供的工具,包括额外的数据类型、类、模板、异常、命名空间、运算符重载、函数名重载、引用、免费存储管理操作符和其他库设施。

http://eel.is/c++draft/intro.scope

C18 (以前称为C17)是ISO/IEC 9899: 2018 的非正式名称,这是最新的C编程语言标准,于2018年6月发布。它取代了C11 (标准ISO/IEC 9899:2011)。

修订)

票数 3
EN

Stack Overflow用户

发布于 2020-03-05 13:45:02

我相信您的问题背后的理由是,当您在extern "C"中使用C++时,它会以某种方式调用特定版本的单独C编译器。

extern "C"所做的是告诉C++编译器对函数使用C链接,以便其他使用C链接的代码能够正确地链接到这些函数。它不会影响源代码的编译方式,只会在extern块中重载非成员函数时抛出编译器错误。

如果您编写了一些东西( C++ ),那么像这样编译器就不会抱怨。

代码语言:javascript
复制
extern "C" {

    // this is still a C++ compiler, works as usual
    class CPP
    {
        public:

            // these are inside a class and can be overloaded,
            // and they will be mangled as usual
            static int foo(int i) { return i; };
            static int foo(int i, int j) { return i + j; }
    };

    // these will not be mangled due to 'extern "C"'        
    int foo(int i) { return CPP::foo(i); }
    int bar(int i, int j) { return CPP::foo(i, j); }
}

同时,这个简单的C代码在任何C++编译器中都会失败:

代码语言:javascript
复制
int * x = malloc(1);

这段来自C11的代码也是如此,因为_Atomic不是C++标准中的有效限定符:

代码语言:javascript
复制
#include <stdatomic.h>    
_Atomic int x;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60544009

复制
相关文章

相似问题

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