我试着在openstd上搜索"C18“和”C18“的最新草稿。C++标准是否支持C的最新标准?
发布于 2020-03-05 14:31:49
C++ (任何版本)不包括C(任何版本)批发。它只是根据需要引用C规范的部分内容。例如,C++包含(大部分)C标准库,它是通过引用C标准的适当部分来实现的,而不是从C标准中复制。
当C++20引用C规范的一个版本时,它引用了C18。
发布于 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)。
发布于 2020-03-05 13:45:02
我相信您的问题背后的理由是,当您在extern "C"中使用C++时,它会以某种方式调用特定版本的单独C编译器。
extern "C"所做的是告诉C++编译器对函数使用C链接,以便其他使用C链接的代码能够正确地链接到这些函数。它不会影响源代码的编译方式,只会在extern块中重载非成员函数时抛出编译器错误。
如果您编写了一些东西( C++ ),那么像这样编译器就不会抱怨。
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++编译器中都会失败:
int * x = malloc(1);这段来自C11的代码也是如此,因为_Atomic不是C++标准中的有效限定符:
#include <stdatomic.h>
_Atomic int x;https://stackoverflow.com/questions/60544009
复制相似问题