C/C++标准及各编译器的支持情况
Dec 25, 2013
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专栏。有改动。