C/C++标准及各编译器的支持情况

C/C++标准及各编译器的支持情况

Dec 25, 2013
Coding
C++

C语言关键字(32+) #

基本的有32个保留关键字(Reserved Keywords),后续的C99和C11标准又增添了一些关键字。

32个保留关键字(C89) #

char        short	    int	    unsigned
long	    float	    double	struct
union	    void	    enum	signed
const	    volatile	typedef	auto
register	static	    extern	break
case	    continue	default	do
else	    for	        goto	if
return	    switch	    while	sizeof

注意: sizeof 是关键字,而不是函数或者宏

C99标准新增关键字 #

_Bool	_Complex	_Imaginary	inline	restrict

_Bool与C++中的bool类型相同,值为0或1,定义在 <stdbool.h> 中

_Complex和_Imaginary用于定义复数类型。

inline与C++中的inline相同,内联支持。

restrict用于修饰指针。

C11标准新增关键字 #

_Alignas	_Alignof	    _Atomic	        _Generic
_Noreturn	_Static_assert	_Thread_local	

主要来源:维基百科“C语言”

C语言版本演变 #

K&R C #

1978年, Dennis Ritchie (丹尼斯 里奇,C语言之父)和 Brian Kernighan 发表著作the C Programming Language第一版。书中介绍的C语言被称为“K&R C”

C89(ANSI C) #

1989年,ANSI将C标准化。与K&R C相比,主要改动有:1.增加了真正的标准库;2. 增加新关键字const,volatile,signed;3. 函数原型和声明的变化;等等

C99 #

1999年。主要特性有:1. 新增关键字(见上,inline);2. 支持单行注释//;3. 支持long long;4. 取消函数默认返回类型为int的规定;支持不定长数组;等等

C11 #

2011年。提高了对C++的兼容性。主要特性有:1. 多线程的支持;2. 增强Unicode支持;等等

C++关键字(63+) #

基本的关键字为63个,C++11标准又新增了10个关键字

基本关键字 #

asm          auto     bool     break    case
catch        char     class    const    const_cast
continue     default  delete   do       double
dynamic_cast else     enum     explicit export
extern       false    float    for      friend
goto         if       inline   int      long
mutable    namespace  new      operator private
protected   public    register reinterpret_cast return
short       signed    sizeof   static   static_cast
struct      switch    template this     throw
true        try       typedef  typeid   typename
union       unsigned  using    virtual void
volatile    wchar_t   while

C++11新增关键字 #

alignas	alignof	char16_t	char32_t	constexpr
decltype	nonexcept	nullptr	static_assert	thread_local

可见与C11中新增关键字类似。

C、C++关键字比较(不包括新增) #

粗体为C++特有的。

asm auto bool break case catch char
class const const_cast continue default delete do
double dynamic_cast else enum explicit export extern
false float for friend goto if inline
int long mutable namespace new operator private
protect public register reinterpret_cast return short signed
sizeof static static_cast struct switch template this
throw true try typedef typeid typename union
unsigned using virtual void volatile wchar_t while

C++语言版本演变 #

C with Classes #

Bjarne Stroustrup(比雅尼·斯特劳斯特鲁普,C++之父),上世纪80年代,贝尔实验室。最初名为“C with Classes”,1983年改名C++。

C++98 #

1998年,ANSI-ISO将其标准化。引入了C++标准库(包括标准模板库STL和C标准库的修改版)。

C++03 #

2003年,发布了C++标准的修订版本。称为C++03。

TR1 #

2005年,发布了一份名为 Library Technical Report 1(简称TR1)的技术报告,TR1不属于官方C++标准,但是后续可能纳入标准。TR1主要包括:正则表达式、智能指针、哈希表、随机数生成器等。

C++11 #

2011年,目前的最新标准,多数编译器还没有很好的支持。主要特性有:支持Lambda表达式、对象类型自动推导、空指针nullptr、统一初始化语言、auto意义变化、register视为过时、export 取消其意义仅保留关键字…

主要来源:维基百科“C++”

编译器的支持情况 #

目前最符合和接近C++标准的编译器有为 GNU GCC 4.5.0 和 Visual Studio 2010 等;VC++ 6.0 对标准支持的不是很好,这一部分详见我的其他博文。void main(){}是MicroSoft 公司的用法,不符合C++规范。


该文2011-04-23 13:07首发于我的CSDN专栏。有改动。