文档库 最新最全的文档下载
当前位置:文档库 › C语言32个关键字详解

C语言32个关键字详解

C语言32个关键字详解
C语言32个关键字详解

C语言中32个关键字详解

由ANSI标准定义的C语言关键字共32个:

auto double int struct break else long switch

case enum register typedef char extern return union

const float short unsigned continue for signed void

default goto sizeof volatile do if while static

根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。

1数据类型关键字

A基本数据类型(5个)

void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果

char:字符型类型数据,属于整型数据的一种

int:整型数据,通常为编译器指定的机器字长

float:单精度浮点型数据,属于浮点数据的一种

double:双精度浮点型数据,属于浮点数据的一种

B类型修饰关键字(4个)

short:修饰int,短整型数据,可省略被修饰的int。

long:修饰int,长整形数据,可省略被修饰的int。

signed:修饰整型数据,有符号数据类型

unsigned:修饰整型数据,无符号数据类型

C复杂类型关键字(5个)

struct:结构体声明

union:共用体声明

enum:枚举声明

typedef:声明类型别名

sizeof:得到特定类型或特定类型变量的大小

D存储级别关键字(6个)

auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配

static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部

register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数

extern:指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的韵蟮囊桓觥耙谩?

const:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)

volatile:与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值

2流程控制关键字

A跳转结构(4个)

return:用在函数体中,返回特定值(或者是void值,即不返回值)

continue:结束当前循环,开始下一轮循环

break:跳出当前循环或switch结构

goto:无条件跳转语句

B分支结构(5个)

if:条件语句

else:条件语句否定分支(与if连用)

switch:开关语句(多重分支语句)

case:开关语句中的分支标记

default:开关语句中的“其他”分治,可选。

C循环结构(3个)

for:for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2...循环,其中2为循环条件do:do循环结构,do 1 while(2);的执行顺序是1->2->1...循环,2为循环条件

while:while循环结构,while(1) 2;的执行顺序是1->2->1...循环,1为循环条件

以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。

C99和C89标准对比多了些什么

1、restrict:指针类型修饰符

C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元,或者

指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的语义。

如果某个函数定义了两个restrict指针变元,编译程序就假定它们指向两个不同的对象,memcpy()函数就是restrict指针的一个典型应用示例。C89中memcpy()函数原型如下:

代码:

--------------------------------------------------------------------------------

void *memcpy (void *s1, const void *s2, size_t size);

--------------------------------------------------------------------------------

如果s1和s2所指向的对象重叠,其操作就是未定义的。memcpy()函数只能用于不重叠的对象。C99中memcpy()函数原型如下:

代码:

--------------------------------------------------------------------------------

void *memcpy(void *restrict s1, const void *restrict s2,size_t size);

--------------------------------------------------------------------------------

通过使用restrict修饰s1和s2 变元,可确保它们在该原型中指向不同的对象。

2、inline(内联)关键字

内联函数除了保持结构化和函数式的定义方式外,还能使程序员写出高效率的代码.函数的每次调用与返回都会消耗相当大的系统资源,尤其是当函数调用发生在重复次数很多的循环语句中时.一般情况下,当发生一次函数调用时,变元需要进栈,各种寄存器内存需要保存.当函数返回时,寄存器的内容需要恢复。如果该函数在代码内进行联机扩展,当代码执行时,这些保存和恢复操作旅游活动会再发生,而且函数调用的执行速度也会大大加快。函数的联机扩展会产生较长的代码,所以只应该内联对应用程序性能有显著影响的函数以及长度较短的函数。

3、新增数据类型

_Bool

值是0或1。C99中增加了用来定义bool、true以及false宏的头文件夹,以便程序员能够编写同时兼容于C与C++的应用程序。在编写新的应用程序时,应该使用头文件中的bool宏。

_Complex and _Imaginary

C99标准中定义的复数类型如下:float_Complex; float_Imaginary; double_Complex; double_Imaginary; long double_Complex; long double_Imaginary.

头文件中定义了complex和imaginary宏,并将它们扩展为_Complex和_Imaginary,因此在编写新的应用程序时,应该使用头文件中的complex和imaginary宏。

long long int

C99标准中引进了long long int(-(2e63 - 1)至2e63 - 1)和unsigned long long int(0 - 2e64 - 1)。long long int能够支持的整数长度为64位。

4、对数组的增强

可变长数组

C99中,程序员声明数组时,数组的维数可以由任一有效的整型表达式确定,包括只在运行时才能确定其值的表达式,这类数组就叫做可变长数组,但是只有局部数组才可以是变长的.

可变长数组的维数在数组生存期内是不变的,也就是说,可变长数组不是动态的.可以变化的只是数组的大小.可以使用*来定义不确定长的可变长数组。

数组声明中的类型修饰符

在C99中,如果需要使用数组作为函数变元,可以在数组声明的方括号内使用static关键字,这相当于告诉编译程序,变元所指向的数组将至少包含指定的元素个数。也可以在数组声明的方括号内使用restrict,volatile,const关键字,但只用于函数变元。如果使用restrict,指针是初始访问该对象的惟一途径。如果使用const,指针始终指向同一个数组。使用volatile 没有任何意义。

5、单行注释

引入了单行注释标记"//" , 可以象C++一样使用这种注释了。

6、分散代码与声明

7、预处理程序的修改

a、变元列表

宏可以带变元,在宏定义中用省略号(...)表示。内部预处理标识符__V A_ARGS__决定变元将在何处得到替换。例:#define MySum(...) sum(__VA_ARGS__) 语句MySum(k,m,n); 将被转换成:sum(k, m, n);变元还可以包含变元。例:#define compare(compf, ...)

compf(__V A_ARGS__) 其中的compare(strcmp,"small", "large"); 将替换成:strcmp("small","large");

b、_Pragma运算符

C99引入了在程序中定义编译指令的另外一种方法:_Pragma运算符。格式如下:

_Pragma("directive")

其中directive是要满打满算的编译指令。_Pragma运算符允许编译指令参与宏替换。

c、内部编译指令

STDCFP_CONTRACT ON/OFF/DEFAULT 若为ON,浮点表达式被当做基于硬件方式处理的独立单元。默认值是定义的工具。

STDCFEVN_ACCESS ON/OFF/DEFAULT 告诉编译程序可以访问浮点环境。默认值是定义的工具。

STDC CX_LIMITED_RANGE ON/OFF/DEFAULT 若值为ON,相当于告诉编译程序某程序某些含有复数的公式是可靠的。默认是OFF。

d、新增的内部宏

__STDC_HOSTED__ 若操作系统存在,则为1

__STDC_VERSION__ 199991L或更高。代表C的版本

__STDC_IEC_599__ 若支持IEC 60559浮点运算,则为1

__STDC_IEC_599_COMPLEX__ 若支持IEC 60599复数运算,则为1

__STDC_ISO_10646__ 由编译程序支持,用于说明ISO/IEC 10646标准的年和月格式:yyymmmL

8、for语句内的变量声明

C99中,程序员可以在for语句的初始化部分定义一个或多个变量,这些变量的作用域仅于本for语句所控制的循环体内。比如:

代码:

--------------------------------------------------------------------------------

for(int i=0; i<10; i++){

// do someting ...

}

--------------------------------------------------------------------------------

9、复合赋值

C99中,复合赋值中,可以指定对象类型的数组、结构或联合表达式。当使用复合赋值时,应在括弧内指定类型,后跟由花括号围起来的初始化列表;若类型为数组,则不能指定数组的大小。建成的对象是未命名的。

例:double *fp = (double[]) {1.1, 2.2, 3.3};

该语句用于建立一个指向double的指针fp,且该指针指向这个3元素数组的第一个元素。在文件域内建立的复合赋值只在程序的整个生存期内有效。在模块内建立的复合赋值是局部对象,在退出模块后不再存在。

10、柔性数组结构成员

C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其他成员。柔性数组成员允许结构中包含一个大小可变的数组。sizeof返回的这种结构大小不包括柔性数组的内存。包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。

11、指定的初始化符

C99中,该特性对经常使用稀疏数组的程序员十分有用。指定的初始化符通常有两种用法:用于数组,以及用于结构和联合。用于数组的格式:[index] = vol; 其中,index表示数组的下标,vol表示本数组元素的初始化值。

例如:int x[10] = {[0] = 10, [5] = 30}; 其中只有x[0]和x[5]得到了初始化.用于结构或联合的格式如下:

member-name(成员名称)

对结构进行指定的初始化时,允许采用简单的方法对结构中的指定成员进行初始化。

例如:struct example{ int k, m, n; } object = {m = 10,n = 200};

其中,没有初始化k。对结构成员进行初始化的顺序没有限制。

12、printf()和scanf()函数系列的增强

C99中printf()和scanf()函数系列引进了处理long long int和unsigned long long int 数据类型的特性。long long int 类型的格式修饰符是ll。在printf()和scanf()函数中,ll适用于d, i, o, u 和x格式说明符。另外,C99还引进了hh修饰符。当使用d, i, o, u和x格式说明符时,hh用于指定char型变元。ll和hh修饰符均可以用于n说明符。

格式修饰符a和A用在printf()函数中时,结果将会输出十六进制的浮点数。格式如下:[-]0xh, hhhhp + d 使用A格式修饰符时,x和p必须是大写。A和a格式修饰符也可以用在scanf()函数中,用于读取浮点数。调用printf()函数时,允许在%f说明符前加上l修饰符,即%lf,但不起作用。

13、C99新增的库

C89中标准的头文件

定义宏assert()

字符处理

错误报告

定义与实现相关的浮点值勤

定义与实现相关的各种极限值

支持函数setlocale()

数学函数库使用的各种定义

支持非局部跳转

定义信号值

支持可变长度的变元列表

定义常用常数

支持文件输入和输出

其他各种声明

支持串函数

支持系统时间函数

C99新增的头文件和库

支持复数算法

给出对浮点状态标记和浮点环境的其他方面的访问

定义标准的、可移植的整型类型集合。也支持处理最大宽度整数的函数 首先在此1995年第一次修订时引进,用于定义对应各种运算符的宏

支持布尔数据类型类型。定义宏bool,以便兼容于C++

定义标准的、可移植的整型类型集合。该文件包含在

定义一般类型的浮点宏

首先在1995年第一次修订时引进,用于支持多字节和宽字节函数

首先在1995年第一次修订时引进,用于支持多字节和宽字节分类函数14、__func__预定义标识符

用于指出__func__所存放的函数名,类似于字符串赋值。

15、其它特性的改动

放宽的转换限制

限制C89标准C99标准

数据块的嵌套层数15127

条件语句的嵌套层数863

内部标识符中的有效字符个数3163

外部标识符中的有效字符个数631

结构或联合中的成员个数1271023

函数调用中的参数个数31127

不再支持隐含式的int规则

删除了隐含式函数声明

对返回值的约束

C99中,非空类型函数必须使用带返回值的return语句.

扩展的整数类型

扩展类型含义

int16_t 整数长度为精确16位

int_least16_t 整数长度为至少16位

int_fast32_t 最稳固的整数类型,其长度为至少32位

intmax_t 最大整数类型

uintmax_t 最大无符号整数类型

对整数类型提升规则的改进

C89中,表达式中类型为char,short int或int的值可以提升为int或unsigned int类型.

C99中,每种整数类型都有一个级别.例如:long long int 的级别高于int, int的级别高于char等.在表达式中,其级别低于int或unsigned int的任何整数类型均可被替换成int或unsigned int类型.

此篇文章摘取与即将登载于《Dr.Dobb's 软件研发》》第二期(2003年9月)的《新的C语言,C99标准介绍》,文章主要是介绍了C99的新特性,在得到作者Randy Meyers以及《Dr.Dobb's 软件研发》》负责人刘江先生的应允下,把全文的前面的一部分作为文档发表,希望能对大家有所帮助。

译注2:C语言的产生源于失败的项目---Multics。从70年代初期的早期C语言到后来的K&R C,ANSI C,C89,在将近20年中C语言多次发展演化,一直到1999年C语言又重新定案,成为新的C语言标准。这篇文章发表在CUJ Octorber 2000 V18 N10,当时C99标准刚刚公布一年,C社区正急需正统的声音。本文作者Randy Meyers作为标准委员会委员,在CUJ杂志开了一个专题系列The New C用来讨论新标准的新特性,本文就是其中的第一篇。本文从全局上介绍了新标准C,尤其是一些增加的特性,期望本文能给关心C语言和使用C 语言的用户带来帮助。在翻译上,所有译者在翻译过程中有疑惑的术语或者其他一切都以括号形式把原文直接给出,诚心不想给读者半点误导,但是否如愿还需读者的评判,关于本文的一切可以用amstrongest@https://www.wendangku.net/doc/af9213312.html,与译者联系和讨论。

C99很像C89,很多地方是一致的,但更多的却是不同。

简介

你可能没有注意到,针对ANSI/ISO C的主要的修订版[1] 在去年12月已经被核准通过,那是就C99。同样的,你可能也没注意到,其实你已经在使用这个新的C语言了,或者至少用到它的一部分。这需要归功于标准委员会在接受新特性到C语言的过程中采取了恰当而保守的方式。差不多所有的新特性早已经被实现并且在现存的一些C编译器(impletmentations)中证明了其存在的价值。虽然没有编译器能保证全部的C99特性,但其中许多在很多年前就实现了C99中不同的部分。这对于C程序员来说将是个好消息。或许你曾经为了保证程序的可移植性而在你喜爱的编译器里避免使用一些独立的特性,但现在如果这些特性是C99中的一部分的话,你可以放心的使用这些特性,因为他们将在大部分遵守C99标准的编译器中被保证。毫无疑问,新标准是向上兼容旧的,当然也会有些不兼容地方,但这些都是非常少而次要的。标准委员会非常努力地工作就是为了将和老版本的兼容性问题所带来的影响减少到最小。从后面讨论到的关键字你可以看到这方面的例证。

命名和历史

程序设计语言随着时间在不断演进,语言的命名方式不仅仅依赖于语言本身的名字,还结合了它们被定义的年代。(回到五年前,ALGOL 68, C89, Fortran 77还有Fortran 4,我对这些名字真的感到好笑,如今这些令人讨厌的命名方式还带来了千年虫问题,04将无法区别眼前的2004或者久远的1904)。新的C语言和定义它的新标准被称为C99,而原来的C语言标准[2]被称为C89或者C90(ANSI在1989年公布了标准文档而ISO在1990年重新编排了标准文档章节后才公布)。如果你在自己的程序中处理过日语,韩语,或者中文的文字问题你也许会知道对于C89来说曾经有一次小的升级[3]被称为C95,这次升级主要是加入了更

多的用来处理多字节和宽字节字符(wide and multibyte characters)的库函数(Java的倡导者曾经错误的宣布Java是第一个支持大字符集合的语言,其实这样的支持在C89中就已经存在了)。

对于C99施加影响最大的或许就是数值C语言扩展小组(Numerical C Extensions Group, or NCEG.)。NCEG是ANSI C标准委员会J11的一个子委员会,他们主要在C89完成后从事技术报告工作[4]。NCEG的技术报告不是标准,它只是号召编译器实现者来体会并且得到那些一系列描叙清楚的语言特性的经验。这些扩展中大的部分是用来处理C语言数值编程的(IEEE arithmetic, complex numbers),但是还有一些是为了其他一般目标或者性能的提升和优化(变长数组,并行处理,restrict关键字)。

NCEG的扩展一些是由子标准委员会首次定义的,而其他一些则是根据编译器厂商对于已经实现的特性的反馈而重新定义的。所以技术报告不是标准,编译器厂商可以自由的选取并且实现这些扩展,甚至可以根据用户的经验更改这些扩展。

真实世界的需求是非常有价值的。语言的不同特性在内部会以一种令人吃惊的方式相互作用,而有的特性将会给程序的运行效率带来不良影响,即使这些特性永远都不会被用到(举例来说,在一些C++的实现中,使用少量多继承的程序将会比只使用单继承的程序慢一些)。NCEG的扩展实验不仅仅是为了改进扩展本身,同时是为了改进它们的规格,并且让标准委员会对于那些已知的语言特性的内部作用和价值保持信心。

哪些不属于C99

并不是所有的NCEG扩展都被C99所接受,其中最大的例子也许就是NCEG对并行处理的支持并没有被C99所接受。这些并行处理是基于Thinking Machines上的C*语言(读作C-Star)的。并行计算机制造商为了能让程序员写出清晰的并行程序代码而做出许多不同的扩展特性,而NCEG技术报告对此却没有做出改进,所以仍然没有一致的并且是最好的方式在并行计算机上编程。因此,这样的特性是不适合被标准C语言接受的。另外一些NCEG 扩展在被加入到C99之前做了一些更改。NCEG支持的复数包含分开的虚数数据类型(separate imaginary datatypes)。比如,double_ imaginary数据类型。但是在C99中虚数数据类型却是可选择的。

然而,被考虑得最多到最后却没有被C99采纳的特性不是来自NCEG,而是C++。在将近一年的时间里,标准委员会一直在从事C ++中的子集--面向对象特性的研究工作。这个子集有点像80年代末的C++特性的混合,包括单继承(非多继承),虚函数,成员访问控制(公有,私有,保护),构造函数,析构函数。如果新的C语言与早期的C++相似可以说是既有进步也有退步。积极的一面是,这些特性对于初期C++的流行起到了巨大作用,到现在这些特性的价值和它们之间的内在作用已经被大家很好的理解,而且已经证明它们是可以共存的。然而,消极的一面是“90年代的C++是否可以看作是80 年代的C++的自然演化?如果是,C采用80年代的C++的特性价值何在?要知道我们已经拥有90年代的C++了。”最终,多方面的原因,包括一些逻辑上的,让标准委员会拒绝把面向对象特性加入到C语言中去。

Randy Meyers is consultant providing training and mentoring in C, C++, and Java. He is the current chair of J11, the ANSI C committee, and previously was a member of J16 (ANSI C++)

and the ISO Java Study Group. He worked on compilers for Digital Equipment Corporation for 16 years and was Project Architect for DEC C and C++. He can be reached at rmeyers@https://www.wendangku.net/doc/af9213312.html,.

新的C语言:C99标准介绍

Randy Meyers

此篇文章摘取与即将登载于《Dr.Dobb's 软件研发》》第二期(2003年9月)的《新的C语言,C99标准介绍》,文章主要是介绍了C99的新特性,在得到作者Randy Meyers以及《Dr.Dobb's 软件研发》》负责人刘江先生的应允下,把全文的前面的一部分作为文档发表,希望能对大家有所帮助。

译注2:C语言的产生源于失败的项目---Multics。从70年代初期的早期C语言到后来的K&R C,ANSI C,C89,在将近20年中C语言多次发展演化,一直到1999年C语言又重新定案,成为新的C语言标准。这篇文章发表在CUJ Octorber 2000 V18 N10,当时C99标准刚刚公布一年,C社区正急需正统的声音。本文作者Randy Meyers作为标准委员会委员,在CUJ杂志开了一个专题系列The New C用来讨论新标准的新特性,本文就是其中的第一篇。本文从全局上介绍了新标准C,尤其是一些增加的特性,期望本文能给关心C语言和使用C 语言的用户带来帮助。在翻译上,所有译者在翻译过程中有疑惑的术语或者其他一切都以括号形式把原文直接给出,诚心不想给读者半点误导,但是否如愿还需读者的评判,关于本文的一切可以用amstrongest@https://www.wendangku.net/doc/af9213312.html,与译者联系和讨论。

C99很像C89,很多地方是一致的,但更多的却是不同。

简介

你可能没有注意到,针对ANSI/ISO C的主要的修订版[1] 在去年12月已经被核准通过,那是就C99。同样的,你可能也没注意到,其实你已经在使用这个新的C语言了,或者至少用到它的一部分。这需要归功于标准委员会在接受新特性到C语言的过程中采取了恰当而保守的方式。差不多所有的新特性早已经被实现并且在现存的一些C编译器(impletmentations)中证明了其存在的价值。虽然没有编译器能保证全部的C99特性,但其中许多在很多年前就实现了C99中不同的部分。这对于C程序员来说将是个好消息。或许你曾经为了保证程序的可移植性而在你喜爱的编译器里避免使用一些独立的特性,但现在如果这些特性是C99中的一部分的话,你可以放心的使用这些特性,因为他们将在大部分遵守C99标准的编译器中被保证。毫无疑问,新标准是向上兼容旧的,当然也会有些不兼容地方,但这些都是非常少而次要的。标准委员会非常努力地工作就是为了将和老版本的兼容性问题所带来的影响减少到最小。从后面讨论到的关键字你可以看到这方面的例证。

命名和历史

程序设计语言随着时间在不断演进,语言的命名方式不仅仅依赖于语言本身的名字,还结合了它们被定义的年代。(回到五年前,ALGOL 68, C89, Fortran 77还有Fortran 4,我对这些

名字真的感到好笑,如今这些令人讨厌的命名方式还带来了千年虫问题,04将无法区别眼前的2004或者久远的1904)。新的C语言和定义它的新标准被称为C99,而原来的C语言标准[2]被称为C89或者C90(ANSI在1989年公布了标准文档而ISO在1990年重新编排了标准文档章节后才公布)。如果你在自己的程序中处理过日语,韩语,或者中文的文字问题你也许会知道对于C89来说曾经有一次小的升级[3]被称为C95,这次升级主要是加入了更多的用来处理多字节和宽字节字符(wide and multibyte characters)的库函数(Java的倡导者曾经错误的宣布Java是第一个支持大字符集合的语言,其实这样的支持在C89中就已经存在了)。

对于C99施加影响最大的或许就是数值C语言扩展小组(Numerical C Extensions Group, or NCEG.)。NCEG是ANSI C标准委员会J11的一个子委员会,他们主要在C89完成后从事技术报告工作[4]。NCEG的技术报告不是标准,它只是号召编译器实现者来体会并且得到那些一系列描叙清楚的语言特性的经验。这些扩展中大的部分是用来处理C语言数值编程的(IEEE arithmetic, complex numbers),但是还有一些是为了其他一般目标或者性能的提升和优化(变长数组,并行处理,restrict关键字)。

NCEG的扩展一些是由子标准委员会首次定义的,而其他一些则是根据编译器厂商对于已经实现的特性的反馈而重新定义的。所以技术报告不是标准,编译器厂商可以自由的选取并且实现这些扩展,甚至可以根据用户的经验更改这些扩展。

真实世界的需求是非常有价值的。语言的不同特性在内部会以一种令人吃惊的方式相互作用,而有的特性将会给程序的运行效率带来不良影响,即使这些特性永远都不会被用到(举例来说,在一些C++的实现中,使用少量多继承的程序将会比只使用单继承的程序慢一些)。NCEG的扩展实验不仅仅是为了改进扩展本身,同时是为了改进它们的规格,并且让标准委员会对于那些已知的语言特性的内部作用和价值保持信心。

哪些不属于C99

并不是所有的NCEG扩展都被C99所接受,其中最大的例子也许就是NCEG对并行处理的支持并没有被C99所接受。这些并行处理是基于Thinking Machines上的C*语言(读作C-Star)的。并行计算机制造商为了能让程序员写出清晰的并行程序代码而做出许多不同的扩展特性,而NCEG技术报告对此却没有做出改进,所以仍然没有一致的并且是最好的方式在并行计算机上编程。因此,这样的特性是不适合被标准C语言接受的。另外一些NCEG 扩展在被加入到C99之前做了一些更改。NCEG支持的复数包含分开的虚数数据类型(separate imaginary datatypes)。比如,double_ imaginary数据类型。但是在C99中虚数数据类型却是可选择的。

然而,被考虑得最多到最后却没有被C99采纳的特性不是来自NCEG,而是C++。在将近一年的时间里,标准委员会一直在从事C ++中的子集--面向对象特性的研究工作。这个子集有点像80年代末的C++特性的混合,包括单继承(非多继承),虚函数,成员访问控制(公有,私有,保护),构造函数,析构函数。如果新的C语言与早期的C++相似可以说是既有进步也有退步。积极的一面是,这些特性对于初期C++的流行起到了巨大作用,到现在这些特性的价值和它们之间的内在作用已经被大家很好的理解,而且已经证明它们是可以共存的。然而,消极的一面是“90年代的C++是否可以看作是80 年代的C++的自然演化?如果

是,C采用80年代的C++的特性价值何在?要知道我们已经拥有90年代的C++了。”最终,多方面的原因,包括一些逻辑上的,让标准委员会拒绝把面向对象特性加入到C语言中去。

本文来自CSDN博客,转载请标明出处:https://www.wendangku.net/doc/af9213312.html,/ruyue_ma/archive/2006/06/14/795910.aspx

c99是在c89的基础上发展起来的,增加了基本数据类型,关键字和一些系统函数等。其实在初学阶段C89(ANSI C)和C99的区别是不易察觉的,所以不必太在意这个。

C99有一部分是对于大字符集的优化(很多资料上写的是ANSI标准化),还加入了一些数据库函数,是C89之后的标准,我们用的C是C89标准的,C++是C89编写的,目前的C99标准其实在以前的编译器中就或多或少的支持了,目前完全支持的有这些:MinGW、Borland C++、dev-C++。

C99标准的新特性

在ANSI标准化后,C语言的标准在一段相当的时间内都保持不变,尽管C++继续在改进。(实际上,Normative Amendment1在1995年已经开发了一个新的C语言版本。但是这个版本很少为人所知。)标准在90年代才经历了改进,这就是ISO9899:1999(1999年出版)。这个版本就是通常提及的C99。它被ANSI于2000年3月采用。

在C99中包括的特性有:

对编译器限制增加了,比如源程序每行要求至少支持到4095 字节,变量名函数名的要求支持到63 字节(extern 要求支持到31)。

预处理增强了。例如:

宏支持取参数#define Macro(...) __V A_ARGS__

使用宏的时候,参数如果不写,宏里用#,## 这样的东西会扩展成空串。(以前会出错的)

支持// 行注释(这个特性实际上在C89的很多编译器上已经被支持了)

增加了新关键字restrict,inline,_Complex,_Imaginary,_Bool

支持long long,long double _Complex,float _Complex 这样的类型

支持<: :> <% %> %: %:%: ,等等奇怪的符号替代,D&E 里提过这个

支持了不定长的数组。数组的长度就可以用变量了。声明类型的时候呢,就用int a

这样的写法。不过考虑到效率和实现,这玩意并不是一个新类型。所以就不能用在全局里,或者struct union 里面,如果你用了这样的东西,goto 语句就受限制了。

变量声明不必放在语句块的开头,for 语句提倡这么写for(int i=0;i<100;++i) 就是说,int i 的声明放在里面,i 只在for 里面有效。(VC没有遵守这条标准,i 在for 外也有效;但vc2005里已经默认是i在外面不可见了,但有编译选项可以设置。)

当一个类似结构的东西需要临时构造的时候,可以用(type_name){xx,xx,xx} 这有点像C++ 的构造函数

初始化结构的时候现在可以这样写:

struct {int a[3], b;} hehe[] = { [0].a = {1}, [1].a = 2 };

struct {int a, b, c, d;} hehe = { .a = 1, .c = 3, 4, .b = 5} // 3,4 是对.c,.d 的赋值

字符串里面,\u 支持unicode 的字符

支持16 进制的浮点数的描述

所以printf和scanf 的格式化串多了支持ll / LL (VC6 里用的I64) 对应新的long long 类型。

浮点数的内部数据描述支持了新标准,这个可以用#pragma 编译器指定

除了已经有的__line__ __file__ 以外,又支持了一个__func__ 可以得到当前的函数名对于非常数的表达式,也允许编译器做化简

修改了对于/ % 处理负数上的定义,比如老的标准里-22 / 7 = -3,-22 % 7 = -1 而现在-22 / 7 = -4,-22 % 7 = 6

取消了不写函数返回类型默认就是int 的规定

允许struct 定义的最后一个数组写做[] 不指定其长度描述

const const int i; 将被当作const int i; 处理

增加和修改了一些标准头文件。比如定义bool 的,定义一些标准长度的int 的,定义复数的 定义宽字符的 有点泛型味道的数学函数 跟浮点数有关的 里多了一个va_copy 可以复制... 的参数。 里多了个struct tmx 对struct tm 做了扩展

输入输出对宽字符还有长整数等做了相应的支持

相对于c89的变化还有

1、增加restrict指针

C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的语义。

如果某个函数定义了两个restrict指针变元,编译程序就假定它们指向两个不同的对象,memcpy()函数就是restrict指针的一个典型应用示例。C89中memcpy()函数原型如下:代码: void *memcpy (void *s1, const void *s2, size_t size);

如果s1和s2所指向的对象重叠,其操作就是未定义的。memcpy()函数只能用于不重叠的对象。C99中memcpy()函数原型如下:代码: void *memcpy(void *restrict s1, const void *restrict s2,size_t size);

通过使用restrict修饰s1和s2 变元,可确保它们在该原型中指向不同的对象。

2、inline(内联)关键字

内联函数除了保持结构化和函数式的定义方式外,还能使程序员写出高效率的代码。函数的每次调用与返回都会消耗相当大的系统资源,尤其是当函数调用发生在重复次数很多的循环语句中时。一般情况下,当发生一次函数调用时,变元需要进栈,各种寄存器内存需要保存。当函数返回时,寄存器的内容需要恢复。如果该函数在代码内进行联机扩展,当代码执行时,这些保存和恢复操作旅游活动会再发生,而且函数调用的执行速度也会大大加快。函数的联机扩展会产生较长的代码,所以只应该内联对应用程序性能有显著影响的函数以及长度较短的函数。

3、新增数据类型

_Bool

值是0或1。C99中增加了用来定义bool、true以及false宏的头文件夹,以便程序员能够编写同时兼容于C与C++的应用程序。在编写新的应用程序时,应该使用头文件中的bool宏。

_Complex and _Imaginary

C99标准中定义的复数类型如下:float_Complex;float_Imaginary;double_Complex;double_Imaginary;long double_Complex;long double_Imaginary。

头文件中定义了complex和imaginary宏,并将它们扩展为_Complex和_Imaginary,因此在编写新的应用程序时,应该使用头文件中的complex和imaginary宏。

long long int

C99标准中引进了long long int(-(2e63 - 1)至2e63 - 1)和unsigned long long int(0 - 2e64 - 1)。long long int能够支持的整数长度为64位。

4、对数组的增强

可变长数组

C99中,程序员声明数组时,数组的维数可以由任一有效的整型表达式确定,包括只在运行时才能确定其值的表达式,这类数组就叫做可变长数组,但是只有局部数组才可以是变长的。

可变长数组的维数在数组生存期内是不变的,也就是说,可变长数组不是动态的。可以变化的只是数组的大小。可以使用*来定义不确定长的可变长数组。

数组声明中的类型修饰符

在C99中,如果需要使用数组作为函数变元,可以在数组声明的方括号内使用static关键字,这相当于告诉编译程序,变元所指向的数组将至少包含指定的元素个数。也可以在数组声明的方括号内使用restrict,volatile,const关键字,但只用于函数变元。如果使用restrict,指针是初始访问该对象的惟一途径。如果使用const,指针始终指向同一个数组。使用volatile 没有任何意义。

5、单行注释

引入了单行注释标记"//" , 可以像C++一样使用这种注释了。

6、分散代码与声明

7、预处理程序的修改

a、变元列表

宏可以带变元,在宏定义中用省略号(...)表示。内部预处理标识符__V A_ARGS__决定变元将在何处得到替换。例:#define MySum(...) sum(__VA_ARGS__) 语句MySum(k,m,n);

将被转换成:sum(k, m, n); 变元还可以包含变元。例:#define compare(compf, ...) compf(__V A_ARGS__) 其中的compare(strcmp,"small", "large"); 将替换成:strcmp("small","large");

b、_Pragma运算符

C99引入了在程序中定义编译指令的另外一种方法:_Pragma运算符。格式如下:

_Pragma("directive")

其中directive是要满打满算的编译指令。_Pragma运算符允许编译指令参与宏替换。

c、内部编译指令

STDCFP_CONTRACT ON/OFF/DEFAULT 若为ON,浮点表达式被当做基于硬件方式处理的独立单元。默认值是定义的工具。

STDCFEVN_ACCESS ON/OFF/DEFAULT 告诉编译程序可以访问浮点环境。默认值是定义的工具。

STDC CX_LIMITED_RANGE ON/OFF/DEFAULT 若值为ON,相当于告诉编译程序某程序某些含有复数的公式是可靠的。默认是OFF。

d、新增的内部宏

__STDC_HOSTED__ 若操作系统存在,则为1

__STDC_VERSION__ 199991L或更高。代表C的版本

__STDC_IEC_599__ 若支持IEC 60559浮点运算,则为1

__STDC_IEC_599_COMPLEX__ 若支持IEC 60599复数运算,则为1

__STDC_ISO_10646__ 由编译程序支持,用于说明ISO/IEC 10646标准的年和月格式:yyymmmL

9、复合赋值

C99中,复合赋值中,可以指定对象类型的数组、结构或联合表达式。当使用复合赋值时,应在括弧内指定类型,后跟由花括号围起来的初始化列表;若类型为数组,则不能指定数组的大小。建成的对象是未命名的。

例:double *fp = (double[]) {1.1, 2.2, 3.3};

该语句用于建立一个指向double的指针fp,且该指针指向这个3元素数组的第一个元素。在文件域内建立的复合赋值只在程序的整个生存期内有效。在模块内建立的复合赋值是局部对象,在退出模块后不再存在。

10、柔性数组结构成员

C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其他成员。柔性数组成员允许结构中包含一个大小可变的数组。sizeof返回的这种结构大小不包括柔性数组的内存。包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。

11、指定的初始化符

C99中,该特性对经常使用稀疏数组的程序员十分有用。指定的初始化符通常有两种用法:用于数组,以及用于结构和联合。用于数组的格式:= vol; 其中,index表示数组的下标,vol表示本数组元素的初始化值。

例如:int x[10] = {[0] = 10, [5] = 30}; 其中只有x[0]和x[5]得到了初始化。用于结构或联合的格式如下:

member-name(成员名称)

对结构进行指定的初始化时,允许采用简单的方法对结构中的指定成员进行初始化。

例如:struct example{ int k, m, n; } object = {m = 10,n = 200};

其中,没有初始化k。对结构成员进行初始化的顺序没有限制。

12、printf()和scanf()函数系列的增强

C99中printf()和scanf()函数系列引进了处理long long int和unsigned long long int数据类型的特性。long long int 类型的格式修饰符是ll。在printf()和scanf()函数中,ll适用于d,i,o,u和x格式说明符。另外,C99还引进了hh修饰符。当使用d,i,o,u和x格式说明符时,hh用于指定char型变元。ll和hh修饰符均可以用于n说明符。

格式修饰符a和A用在printf()函数中时,结果将会输出十六进制的浮点数。格式如下:[-]0xh, hhhhp + d 使用A格式修饰符时,x和p必须是大写。A和a格式修饰符也可以用在scanf()函数中,用于读取浮点数。调用printf()函数时,允许在%f说明符前加上l修饰符,即%lf,但不起作用。

13、C99新增的库

C89中标准的头文件

定义宏assert()

字符处理

错误报告

定义与实现相关的浮点值

定义与实现相关的各种极限值

支持函数setlocale()

数学函数库使用的各种定义

支持非局部跳转

定义信号值

支持可变长度的变元列表

定义常用常数

支持文件输入和输出

其他各种声明

支持串函数

支持系统时间函数

C99新增的头文件和库

支持复数算法

给出对浮点状态标记和浮点环境的其他方面的访问

定义标准的、可移植的整型类型集合。也支持处理最大宽度整数的函数 首先在此1995年第一次修订时引进,用于定义对应各种运算符的宏

支持布尔数据类型类型。定义宏bool,以便兼容于C++

定义标准的、可移植的整型类型集合。该文件包含在

定义一般类型的浮点宏

首先在1995年第一次修订时引进,用于支持多字节和宽字节函数

首先在1995年第一次修订时引进,用于支持多字节和宽字节分类函数

14、__func__预定义标识符

用于指出__func__所存放的函数名,类似于字符串赋值。

15、其它特性的改动

放宽的转换限制

限制C89标准C99标准

数据块的嵌套层数15 127

条件语句的嵌套层数8 63

内部标识符中的有效字符个数31 63

外部标识符中的有效字符个数 6 31

结构或联合中的成员个数127 1023

函数调用中的参数个数31 127

不再支持隐含式的int规则

删除了隐含式函数声明

对返回值的约束

C99中,非空类型函数必须使用带返回值的return语句。

扩展的整数类型

扩展类型含义

int16_t 整数长度为精确16位

int_least16_t 整数长度为至少16位

int_fast32_t 最稳固的整数类型,其长度为至少32位

intmax_t 最大整数类型

uintmax_t 最大无符号整数类型

对整数类型提升规则的改进

C89中,表达式中类型为char,short int或int的值可以提升为int或unsigned int类型。

C99中,每种整数类型都有一个级别。例如:long long int 的级别高于int,int的级别高于char等。在表达式中,其级别低于int或unsigned int的任何整数类型均可被替换成int

或unsigned int类型。

但是各个公司对C99的支持所表现出来的兴趣不同。当GCC和其它一些商业编译器支持C99的大部分特性的时候,微软和Borland却似乎对此不感兴趣。

C语言中的32个关键字及其意思

由ANSI标准定义的C语言关键字共32个: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static 一、数据类型关键字(12个): 1、char [t?ɑ:]:声明字符型变量或函数 (1)主要内容字符:容纳单字符的一种基本数据类型;(2)n.炭;女清洁工 vt. 烧焦; (3)字符类型:字符型(Char) c、字符串型(String) s 、二进制型(Binary) bn、布尔型(Boolean) b 、日期时间型(DateTime) d 、数组型(Array) a、象型(Object) o 、循环控制变量通常使用单一的字符; 2、double [?d?b?l] :声明双精度变量或函数 (1)n. 两倍;(2)a. 两倍的,双重的;(3)v. 加倍的,快步走,加倍努力 3、enum :声明枚举类型 (1)枚举:枚举是一个被命名的整型常数的;(2)枚举类型;(3)列举型; (4)列举enumerate [i?nju:m?reit] 4、float [fl?ut] :声明浮点型变量或函数 (1)浮点数、(2)浮点型、(3)漂浮、(4)浮动 5、int[int]:声明整型变量或函数 (1)符号整数、(2)取整、(3)Int是 integer ['intid??] 的简写 int 声明一个变量为整型。占2个字节,最大表示范围:-32768到32767(十进制)。 long 声明一个变量为长整型。长整型变量占4个字节,最大表示范围: -2147483648(十进制)到2147483647(十进制)。 6、long [l??] :声明长整型变量或函数 (1)长整型(2)a./ ad.长(期)的(地)(3) n.长时间(4)vi.渴望 7、short [??:t] :声明短整型变量或函数 (1)a. 短的,矮的、(2)n. 短裤、(3)adv. 短暂地;突然地,急地 8、signed:声明有符号类型变量或函数 (1)有符号的、(2)带正负号、(3)sign [sain] n.标记,符号;招牌;迹象 v.签(署) 9、struct:声明结构体变量或函数 (1)n.结构(2)结构体(4)创建构架数组(3)structural[?str?kt??r?l]a. 结构的 10、union [?ju:ni?n]:声明共用体(联合)数据类型 (1)联合、(2)n.工会,联盟、(3)合并、(4)团结 11、unsigned [?n'saind]:声明无符号类型变量或函数 (1)无符号的 (1)无符号的 12、void [v?id] :声明函数无返回值或无参数,声明无类型指针(基本上就 这三个作用) (1)a.无效的、(2)没有的、(3)vt.使无效、(4)n.空虚感 二、控制语句关键字(12个):

C语言的32个关键字意义与用法

C语言的32个关键字意义与用法 2009-11-20 13:19 1)auto 声明自动变量。可以显式的声明变量为自动变量,只要不是声明在所有函数文前的变量,即使没有加auto关键字,也默认为自动变量。并且只在声明它的函数内有效。而且当使用完毕后,它的值会自动还原为最初所赋的值。自动变量使用时要先赋值,因为其中包含的是未知的值例如:auto int name=1 2)static: 声明静态变量。可以显式的声明量为静态变量。也为局部变量。只在声明它的函数内有效。它的生命周期从程序开始起一直到程序结束。而且即使使用完毕后,它的值仍不还原。即使没有给静态变量赋值,它也会自动初始化为0,例:static int name=1 3)extern: 声明全局变量。用时声明在main函数之前的变量也叫全局变量。它可以在程序任何地方使用。程序运行期间它一直存在的。全局变量也会初始化为0,例:extern int name 4)register: 声明为寄存器变量。也为局部变量,只在声明它的函数内有效。它是保存寄存器中的,速度要快很多。对于需要频繁使用的变量,使用它来声明会提高程序运行速度。例: register int name=1 5)int: 声明量的类型。int为整数型。注意在16位和32位系统中它的范围是不用的。16位中占用2个字节;32位中占用4个字节。还可以显式的声明为无符号或有符号:unsigned int signed int.有符号和无符号的区别就是把符号也当作数字位来存储;也可以用short和long来声明为短整型或长整行例: int mum 6)float: 声明变量的类型。float浮点型,也叫实型。它的范围固定为4个字节。其中6位小数位,其他为整数位。例: float name 7)double: 声明为双精度类型。它的范围为8个字节,14位为小数位。也可使用更高精度的long double.它的范围则更大,达到10字节。例: double name 8)struct: 声明结构体类型。结构体可以包含各种不类型的量。比如可以把整型,字符型等类型的变量声明在同一个结构体种,使用的时候使用结构体变量直接可以调用。例: struct some{ int a=1; float b=1.1 double=1.1234567 }KKK;

C语言的标识符和关键字

1、标识符 标识符使用来标识源程序中的某个对象的名字的,这些对象可以是语句、数据类型、函数、变量、常量、数组等。 C语言规定:一个标识符由字母、数字和下划线组成,第一个字符必须是字母或下划线,通常以下划线开头的标识符是编译系统专用的,所以在编写C语言程序时,最好不要使用以下划线开头的标识符。但是下划线可以用在第一个字符以后的任何位置。 标识符的长度不要超过32个字符,尽管C语言规定标识符的长度最大可达255个字符,但是在实际编译时,只有前面32个字符能够被正确识别。对于一般的应用程序来说,32个字符的标示符长度足够用了。 C语言对大小写字符敏感,所以在编写程序时要注意大小写字符的区分。例如:对于sec和SEC这两个标识符来说,C语言会认为这是两个完全不同的标识符。 C语言程序中的标识符命名应做到简洁明了、含义清晰。这样便于程序的阅读和维护。例如在比较最大值时,最好使用max来定义该标识符。 2、关键字 在c语言编程中,为了定义变量、表达语句功能和对一些文件进行预处理,还必须用到一些具有特殊意义的字符,这就是关键字。 关键字已被编译系统本身使用,所以用户编写程序时不能够使用这些关键字来作为标识符。C语言中关键字主要有以下三类: ?类型说明符:用来定义变量、函数或其他数据结构的类型,如unsigned char,int,long等 ?语句定义符:用来标示一个语句的功能,如if,for等 ?预处理命令字:用来表示预处理命令的关键字,如include,define等

标准C语言有32个关键字,c51编译器又扩充了一些关键字,这些关键字在编程时需要注意,绝对不能使用这些关键字来定义标识符。

C语言 个关键字九种控制语句 种运算符

总结归纳了C语言的32个关键字 第一个关键字:auto 用来声明自动变量。可以显式的声明变量为自动变量。只要不是声明在所有函数之前的变量,即使没加auto关键字,也默认为自动变量。并且只在声明它的函数内有效。而且当使用完毕后,它的值会自动还原为最初所赋的值。自动变量使用时要先赋值,因为其中包含的是未知的值。 例:auto int name=1; 第二个关键字:static 用来声明静态变量。可以显式的声明变量为静态变量。也为局部变量。只在声明它的函数内有效。它的生命周期从程序开始起一直到程序结束。而且即使使用完毕后,它的值仍旧不还原。即使没有给静态变量赋值,它也会自动初始化为0. 例:static int name=1. 第三个关键字:extern 用来声明全局变量。同时声明在main函数之前的变量也叫全局变量。它可以在程序的任何地方使用。程序运行期间它是一直存在的。全局变量也会初始化为0. 例:extern int name; 第四个关键字:register 用来声明为寄存器变量。也为局部变量,只在声明它的函数内有效。它是保存在寄存器之中的。速度要快很多。对于需要频繁使用的变量使用它来声明会提高程序运行速度。 例:register int name=1; 第五个关键字:int 用来声明变量的类型。int为整型。注意在16位和32位系统中它的范围是不同的。16位中占用2个字节。32位中占用4个字节。还可以显式的声明为无符号或有符号: unsigned int或signed int .有符号和无符号的区别就是把符号位也当作数字位来存储。也可用short和long来声明为短整型,或长整行。 例:int num; 第六个关键字:float 用来声明变量的类型。float为浮点型,也叫实型。它的范围固定为4个字节。其中6位为小数位。其他为整数位。 例:float name;

C语言32个词汇详细解释

C语言32个词汇详细解释 Actual argument 实际参数 Addition 加法 Address 地址 Alert 警告 Algorithm 算法 ANSI 美国国家标准协会 Area 面积 Argument 参数,自变量 Arithmetic expresssion 参数,自变量 Arithmetic operator 算术运算符 Array 数组 Ascending order 升序 Assignment operator 赋值运算符 Back slash 反斜杠 Backspace 退格键 Base address 基地址 Basic Combined Programming Language (BCPL)基本组合编程语言 Binary code file 二进制代码文件 Binary executable 二进制可执行文件 Binary operator 二元运算符 Block 块,语句块 Boolean 布尔值 Bubble sort 冒泡排序 Buffer 缓冲区 Built-in function 内置函数

Call by reference 引用调用 Call by value 传值调用 Called function 被调函数 Calling function 调用函数 Carriage return 回车 Character 字符 Code snippet 代码片断 Column 列 Combined Programming Language (CPL) 组合编程语言 Comma operator 逗号运算符 Compiler 编译器 Compound statement 复合语句 Concatenation 连接 Condition 条件 Conditional construct 条件结构 Constant 常量 Control 控制,控制权 Console 控制台 Counter 计数器 Data type 数据类型 Declaration 声明 Decrement 自减,递减 Descending order 降序 Difference 差 Dimension 维数,维 Division 除法 Double 双精度浮点型

C语言的32个关键字和9种控制语句

C语言的32个关键字和9种控制语句 C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。 1 数据类型关键字(12个): (1) char :声明字符型变量或函数 (2) double :声明双精度变量或函数 (3) enum :声明枚举类型 (4) float:声明浮点型变量或函数 (5) int:声明整型变量或函数 (6) long :声明长整型变量或函数 (7) short :声明短整型变量或函数 (8) signed:声明有符号类型变量或函数 (9) struct:声明结构体变量或函数 (10) union:声明共用体(联合)数据类型 (11) unsigned:声明无符号类型变量或函数 (12) void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用) 2控制语句关键字(12个): A循环语句 (1) for:一种循环语句(可意会不可言传) (2) do :循环语句的循环体 (3) while :循环语句的循环条件 (4) break:跳出当前循环 (5) continue:结束当前循环,开始下一轮循环 B条件语句 (1)if: 条件语句 (2)else :条件语句否定分支(与if 连用) (3)goto:无条件跳转语句 C开关语句 (1)switch :用于开关语句 (2)case:开关语句分支 (3)default:开关语句中的“其他”分支 D返回语句 return :子程序返回语句(可以带参数,也看不带参数) 3 存储类型关键字(4个) (1)auto :声明自动变量一般不使用 (2)extern:声明变量是在其他文件正声明(也可以看做是引用变量)

C语言中的32个英语单词

第一个关键字:auto 用来声明自动变量。可以显式的声明变量为自动变量。只要不是声明在所有函数之前的变量,即使没加auto关键字,也默认为自动变量。并且只在声明它的函数内有效。而且当使用完毕后,它的值会自动还原为最初所赋的值。自动变量使用时要先赋值,因为其中包含的是未知的值。例:auto int name=1; 第二个关键字:static 用来声明静态变量。可以显式的声明变量为静态变量。也为局部变量。只在声明它的函数内有效。它的生命周期从程序开始起一直到程序结束。而且即使使用完毕后,它的值仍旧不还原。即使没有给静态变量赋值,它也会自动初始化为0.例:static int name=1. 第三个关键字:extern 用来声明全局变量。同时声明在main函数之前的变量也叫全局变量。它可以在程序的任何地方使用。程序运行期间它是一直存在的。全局变量也会初始化为0.例:extern int name;第四个关键字:register 用来声明为寄存器变量。也为局部变量,只在声明它的函数内有效。它是保存在寄存器之中的。速度要快很多。对于需要频繁使用的变量使用它来声明会提高程序运行速度。例:register int name=1; 第五个关键字:int 用来声明变量的类型。int为整型。注意在16位和32位系统中它的范围是不同的。16位中占用2个字节。32位中占用4个字节。还可以显式的声明为无符号或有符号:unsigned int signed int .有符号和无符号的区别就是把符号位也当作数字位来存储。也可用short和long来声明为短整型,或长整行。例:int num; 第六个关键字:float 用来声明变量的类型。float为浮点型,也叫实型。它的范围固定为4个字节。其中6位为小数位。其他为整数位。例:float name; 第七个关键字:double 用来声明为双精度类型。它的范围为8个字节。14位为小数位。也可使用更高精度的long double 它的范围则更大,达到10字节。例:double name; 第八个关键字:struct

C语言32个关键字

一、数据类型关键字(12个): 1、char [t?ɑ:]:声明字符型变量或函数 (1)主要内容字符:容纳单字符的一种基本数据类型;(2)n.炭;女清洁工vt.烧焦;(3)字符类型:字符型(Char) c、字符串型(String) s 、二进制型(Binary) bn、布尔型(Boolean) b 、日期时间型(DateTime) d 、数组型(Array) a、象型(Object) o 、循环控制变量通常使用单一的字符; 2、double [?d?b?l] :声明双精度变量或函数 (1)n. 两倍;(2)a. 两倍的,双重的;(3)v. 加倍的,快步走,加倍努力 3、enum :声明枚举类型 (1)枚举:枚举是一个被命名的整型常数的;(2)枚举类型;(3)列举型; (4)列举enumerate [i?nju:m?reit] 4、float [fl?ut] :声明浮点型变量或函数 (1)浮点数、(2)浮点型、(3)漂浮、(4)浮动 5、int[int]:声明整型变量或函数 (1)符号整数、(2)取整、(3)Int是integer ['intid??] 的简写 6、long [l??] :声明长整型变量或函数 (1)长整型(2)a./ ad.长(期)的(地)(3)n.长时间(4)vi.渴望 7、short [??:t] :声明短整型变量或函数 (1)a. 短的,矮的、(2)n. 短裤、(3)adv. 短暂地;突然地,急地 8、signed:声明有符号类型变量或函数 (1)有符号的、(2)带正负号、(3)sign [sain] n.标记,符号;招牌;迹象v.签(署) 9、struct:声明结构体变量或函数 (1)n.结构(2)结构体(4)创建构架数组(3)structural[?str?kt??r?l]a.结构的 10、union [?ju:ni?n]:声明共用体(联合)数据类型 (1)联合、(2)n.工会,联盟、(3)合并、(4)团结 11、unsigned [?n'saind]:声明无符号类型变量或函数 (1)无符号的 12、void [v?id] :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)(1)a.无效的、(2)没有的、(3)vt.使无效、(4)n.空虚感 二、控制语句关键字(12个): A循环语句 1、for [f?, f?:]:一种循环语句(可意会不可言传) 2、do [du, du:] :循环语句的循环体 3、while [wail] :循环语句的循环条件 (1)conj.当…的时;(2)而;(3)虽然n.一会儿vt.消磨 4、break [breik]:跳出当前循环 (1)中断、(2)断开、(3)n.休息vt.打破 5、continue[k?n?tinju:]:结束当前循环,开始下一轮循环 (1)v.继续,延续,延伸 B条件语句 1、if [if]: 条件语句 (1)条件函数、(2)conj.如果,假如、(3)是否、(4)即使、(5)无论何时 2、else [els] :条件语句否定分支(与if 连用) (1)a. 别的(2)ad. 其他,另外

C语言32以及C 63个关键字及其含义

C语言32个关键字及其含义 auto:自动变量用关键字auto作存储类别的声明。(可以省略,不写则隐含确定为“自动存储类别”) break:不能用于循环语句和switch语句之外的任何其他语句中。作用为结束循环。 case:情况之一 char:字符型 const:常量 continue:作用结束本次循环,不是终止整个循环。 default:默认结束 do:做(先做后判断) double:双精度 else:别的 enum:枚举类型, extern:外部变量声明 float:浮点型 for:循环语句, goto:标记。作用是从内层循环跳到外层循环。 if:如果,条件语句

int:整型 long:长整型 register:寄存器标识符return:返回值 short:短整型 signed:有符号型sizeof:大小,长度static:静态的 struct:结构体switch:交换 typedef:起别名 union:共用体unsigned:无符号型void:无返回

C++66个关键字的中文含义 1.asm(汇编),用法如下: asm(指令字符串); 允许在C++程序中嵌入汇编代码。 2.auto(自动,automatic)是存储类型标识符,表明变量“自动”具有本地范围,块范围的变量声明(如for循环体内的变量声明)默认为auto存储类型。 3.bool(布尔)类型,C++中的基本数据结构,其值可选为true(真)或者false(假)。C++中的bool类型可以和int混用,具体来说就是0代表false,非0代表true。bool类型常用于条件判断和函数返回值。 4.break(中断、跳出),用在switch语句或者循环语句中。程序遇到break后,即跳过该程序段,继续后面的语句执行。 5.case用于switch语句中,用于判断不同的条件类型。 6.catch catch和try语句一起用于异常处理。

c语言关键字的用法详解

1. Static用法 1.1 static声明的变量在C语言中有两方面的特征: 1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。 1.2 特点 A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度; B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度; C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题; D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数) E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static 的局部变量的地址作为返回值,若为auto类型,则返回为错指针。 函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。 扩展分析:术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。 1.3 关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:

c语言32位关键字的意思

1 数据类型关键字 A.基本数据类型(5个) void :声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果 char :字符型类型数据,属于整型数据的一种 int :整型数据,通常为编译器指定的机器字长 float :单精度浮点型数据,属于浮点数据的一种 double :双精度浮点型数据,属于浮点数据的一种 B .类型修饰关键字(4个) short :修饰int,短整型数据,可省略被修饰的int。 long :修饰int,长整形数据,可省略被修饰的int。 signed :修饰整型数据,有符号数据类型 unsigned :修饰整型数据,无符号数据类型 C .复杂类型关键字(5个) struct :结构体声明 union :共用体声明 enum :枚举声明 typedef :声明类型别名 sizeof :得到特定类型或特定类型变量的大小 D .存储级别关键字(6个) auto :指定为自动变量,由编译器自动分配及释放。通常在栈上分配 static :指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部 register :指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数 extern :指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 const :与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变) volatile :与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值 2 流程控制关键字 A .跳转结构(4个) return :用在函数体中,返回特定值(或者是void值,即不返回值) continue :结束当前循环,开始下一轮循环 break :跳出当前循环或switch结构 goto :无条件跳转语句 B .分支结构(5个) if :条件语句,后面不需要放分号 else :条件语句否定分支(与if连用) switch :开关语句(多重分支语句) case :开关语句中的分支标记 default :开关语句中的“其他”分支,可选。 C .循环结构(3个) for:for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2...循环,其中2为循环条件。

c语言:九条语句和32个关键字笔记

一、核心语句: 1、顺序结构语句:0条 2、选择语句:2条 if语句的3种形式:(1、if ;2、if---else ;3、if---else if----else)switch----case---break;(前面的都不成立执行其后的语句default:语句;) 3、循环语句:3条=2条核心+1条非核心(do---while) for while 4、转移结构语句:4条=2条(return、break)+2条非核心(goto、continue) 二、9条语句+32个关键字(C语言的基础+核心) if语句: 1、关键字1、if 2、关键字2、else (if----else的核心:非此即彼,一定有结果) if---else if---else说明:(从上往下判断,只有前面的的表达式不成立,才往下判断) 如:char a=6,b=7; if(a

else {c=36;}printf("%d",c); //结果为6 3、关键字3、switch;关键字 4、case;关键字 5、break; 关键字6 、default; 说明:switch--case--break和if---else if---else均是多种选择基本语句,两者可以互相替代 循环语句:1、有限循环2、无限循环 //for一般用于有限循环 //While一般用于无限循环 4、关键字7、for;关键字8:while、关键字9:do 5、关键字10:goto;break;关键字11:continue;关键字12:return break:仅仅用于跳出循环语句(for、while、do--while) continue:仅用于程序调试,正式程序一般不用 return:仅用于函数的返回 goto:无条件转移语句,因为他是有去无回,用不好可能导致一部分程序永远不执行,所以建议不用 goto的用法: main()相当main() {{ while(1)aa: {x=x+1; x=x+1;a=3; a=3;........ goto :aa; }} }

C语言中的32个字

一、C 语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。1 数据类型关键字(12个):(1) char :声明字符型变量或函数(2) double :声明双精度变量或函数(3) enum :声明枚举类型(4) float :声明浮点型变量或函数(5) int : 声明整型变量或函数(6) long :声明长整型变量或函数(7) short :声明短整型变量或函数(8) signed :声明有符号类型变量或函数(9) struct :声明结构体变量或函数(10) union :声明共用体(联合)数据类型(11) unsigned :声明无符号类型变量或函数(12) void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)2控制语句关键字(12个):A 循环语句(1) for :一种循环语句(可意会不可言传)(2) do :循环语句的循环体(3) while :循环语句的循环条件(4) break :跳出当前循环(5) continue :结束当前循环,开始下一轮循环B 条件语句(1)if: 条件语句(2)else :条件语句否定分支(与 if 连用)(3)goto :无条件跳转语句C 开关语句(1)switch :用于开关语句(2)case :开关语句分支(3)default :开关语句中的“其他”分支D 返回语句return :子程序返回语句(可以带参数,也看不带参数)3 存储类型关键字(4个)(1)auto :声明自动变量 一般不使用(2)extern :声明变量是在其他文件正声明(也可以看做是引用变量)(3)register :声明积存器变量(4)static :声明静态变量4 其它关键字(4个): (1)const :声明只读变量 (2)sizeof :计算数据类型长度、管路敷设技术通过管线敷设技术不仅可以解决吊顶层配置不规范高中资料试卷问题,而且可保障各类管路习题到位。在管路敷设过程中,要加强看护关于管路高中资料试卷连接管口处理高中资料试卷弯扁度固定盒位置保护层防腐跨接地线弯曲半径标高等,要求技术交底。管线敷设技术中包含线槽、管架等多项式,为解决高中语文电气课件中管壁薄、接口不严等问题,合理利用管线敷设技术。线缆敷设原则:在分线盒处,当不同电压回路交叉时,应采用金属隔板进行隔开处理;同一线槽内,强电回路须同时切断习题电源,线缆敷设完毕,要进行检查和检测处理。、电气课件中调试对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料试卷相互作用与相互关系,根据生产工艺高中资料试卷要求,对电气设备进行空载与带负荷下高中资料试卷调控试验;对设备进行调整使其在正常工况下与过度工作下都可以正常工作;对于继电保护进行整核对定值,审核与校对图纸,编写复杂设备与装置高中资料试卷调试方案,编写重要设备高中资料试卷试验方案以及系统启动方案;对整套启动过程中高中资料试卷电气设备进行调试工作并且进行过关运行高中资料试卷技术指导。对于调试过程中高中资料试卷技术问题,作为调试人员,需要在事前掌握图纸资料、设备制造厂家出具高中资料试卷试验报告与相关技术资料,并且了解现场设备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。 、电气设备调试高中资料试卷技术电力保护装置调试技术,电力保护高中资料试卷配置技术是指机组在进行继电保护高中资料试卷总体配置时,需要在最大限度内来确保机组高中资料试卷安全,并且尽可能地缩小故障高中资料试卷破坏范围,或者对某些异常高中资料试卷工况进行自动处理,尤其要避免错误高中资料试卷保护装置动作,并且拒绝动作,来避免不必要高中资料试卷突然停机。因此,电力高中资料试卷保护装置调试技术,要求电力保护装置做到准确灵活。对于差动保护装置高中资料试卷调试技术是指发电机一变压器组在发生内部故障时,需要进行外部电源高中资料试卷切除从而采用高中资料试卷主要保护装置。

C语言关键字有哪些

C语言关键字有哪些 作者:dkEditor来源:上学吧等考学院发布时间:2012年05月09日点击数:26 C语言标准定义的32个关键字: auto 声明自动变量,缺省时编译器一般默认为auto int 声明整型变量 double 声明双精度变量 long 声明长整型变量 char 声明字符型变量 float 声明浮点型变量 short 声明短整型变量 signed 声明有符号类型变量 unsigned 声明无符号类型变量 struct 声明结构体变量 union 声明联合数据类型 enum 声明枚举类型 static 声明静态变量 switch 用于开关语句 case 开关语句分支 default 开关语句中的“其他”分支 break 跳出当前循环 register 声明寄存器变量 const 声明只读变量 volatile 说明变量在程序执行中可被隐含地改变 typedef 用以给数据类型取别名(当然还有其他作用) extern 声明变量是在其他文件正声明(也可以看做是引用变量) return 子程序返回语句(可以带参数,也可不带参数) void 声明函数无返回值或无参数,声明空类型指针 continue 结束当前循环,开始下一轮循环 do 循环语句的循环体 while 循环语句的循环条件 if 条件语句 else 条件语句否定分支(与if 连用) for 一种循环语句(可意会不可言传) goto 无条件跳转语句 sizeof 计算对象所占内存空间大小 什么是定义?什么是声明?它们有何区别?举个例子: A)int i; B)extern int i; 什么是定义: 所谓的定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它取上一个名字,这个名字就是我们经常所说的变量名或对象名。但注意,这个名字一旦和这块内存匹配起来(可以想象是这个名字嫁给了这块空间,没有要彩礼啊。^_^),它们就同生共死,终生不离不弃。并且这块内存的位置也不能被

C语言关键字详解

32个关键字详解 第一个关键字:auto 用来声明自动变量。可以显式的声明变量为自动变量。只要不是声明在所有函数之前的变量,即使没加auto关键字,也默认为自动变量。并且只在声明它的函数内有效。而且当使用完毕后,它的值会自动还原为最初所赋的值。自动变量使用时要先赋值,因为其中包含的是未知的值。例:autoint name=1; 第二个关键字:static 用来声明静态变量。可以显式的声明变量为静态变量。也为局部变量。只在声明它的函数内有效。它的生命周期从程序开始起一直到程序结束。而且即使使用完毕后,它的值仍旧不还原。即使没有给静态变量赋值,它也会自动初始化为.例:staticint name=1. 第三个关键字:extern 用来声明全局变量。同时声明在main函数之前的变量也叫全局变量。它可以在程序的任何地方使用。程序运行期间它是一直存在的。全局变量也会初始化为.例:extern int name; 第四个关键字:register 用来声明为寄存器变量。也为局部变量,只在声明它的函数内有效。它是保存在寄存器之中的。速度要快很多。对于需要频繁使用的变量使用它来声明会提高程序运行速度。例:registerint name=1; 第五个关键字:int 用来声明变量的类型。int为整型。注意在位和位系统中它的范围是不同的。位中占用个字节。位中占用个字节。还可以显式的声明为无符号或有符号:unsigned int signed int .有符号和无符号的区别就是把符号位也当作数字位来存储。也可用short和long来声明为短整型,或长整行。例:intnum;

第六个关键字:float 用来声明变量的类型。float为浮点型,也叫实型。它的范围固定为个字节。其中位为小数位。其他为整数位。例:float name; 第七个关键字:double 用来声明为双精度类型。它的范围为个字节。位为小数位。也可使用更高精度的long double 它的范围则更大,达到字节。例:double name; 第八个关键字:struct 用来声明结构体类型。结构体可以包含各种不同类型的量。比如可以把整型,字符型等类型的变量声明在同一个结构体种,使用的时候使用结构体变量直接可以调用。 例: struct some { int a=1; float b=1.1; double=1.1234567; } kkk;

C语言32个关键字详解

C语言中32个关键字详解 由ANSI标准定义的C语言关键字共32个: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static 根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。 1数据类型关键字 A基本数据类型(5个) void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果 char:字符型类型数据,属于整型数据的一种 int:整型数据,通常为编译器指定的机器字长 float:单精度浮点型数据,属于浮点数据的一种 double:双精度浮点型数据,属于浮点数据的一种 B类型修饰关键字(4个) short:修饰int,短整型数据,可省略被修饰的int。 long:修饰int,长整形数据,可省略被修饰的int。 signed:修饰整型数据,有符号数据类型 unsigned:修饰整型数据,无符号数据类型 C复杂类型关键字(5个) struct:结构体声明 union:共用体声明 enum:枚举声明 typedef:声明类型别名 sizeof:得到特定类型或特定类型变量的大小 D存储级别关键字(6个) auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配 static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部

C语言32个关键字详解

C语言32个关键字详解

C语言中32个关键字详解 由ANSI标准定义的C语言关键字共32个: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static 根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。 1数据类型关键字 A基本数据类型(5个) void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果 char:字符型类型数据,属于整型数据的一种int:整型数据,通常为编译器指定的机器字长float:单精度浮点型数据,属于浮点数据的一种 double:双精度浮点型数据,属于浮点数据的

一种 B类型修饰关键字(4个) short:修饰int,短整型数据,可省略被修饰的int。 long:修饰int,长整形数据,可省略被修饰的int。 signed:修饰整型数据,有符号数据类型unsigned:修饰整型数据,无符号数据类型 C复杂类型关键字(5个) struct:结构体声明 union:共用体声明 enum:枚举声明 typedef:声明类型别名 sizeof:得到特定类型或特定类型变量的大小 D存储级别关键字(6个) auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配 static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部

相关文档