c语言ans作用,ANS标准定义C语言是什么?

匿名用户

回答

标准C与经典C的比较

本附录列出了标准C与经典C之间 (即Kernighan和Ritchie合著的The C Programming Language一书第

1版所描述的语言)的大多数显著差异。标题指明了本书的哪章在讨论每个标准C的特性。本附录没有介

绍C库,因为它已经变化很多年了。

如果用户的编译器没有声明是“标准的”,那么最好的办法是查看编译器手册来了解此编译器可以提

供的标准C的特性数量。事实上,所有C语言编译器至少都可以处理一些较新的特性。

对于标准C和经典C之间的其他(不十分重要的)差异,请参考The C Programming Language一书第2

版的附录A和附录C。

第2章 C语言基本概念

标识符 在经典C中,只有标识符的前8个字符是有意义的。

关键字 经典C缺少关键字const、enum、signed、void和volatile。在经典C中,单词

entry是关键字。

第4章 表达式

一元+ 经典C不提供一元+运算符。

第5章 选择语句

switch 在经典C中,switch语句中的控制表达式(和情况标号)在提升后必须具有int类

型。而在标准C中,表达式和标号可以是任何一种整数类型,包括unsigned int

类型和long int类型。

第7章 基本类型

无符号类型 经典C只提供一种无符号类型(unsigned int)。

singed 经典C不支持signed类型说明符。

数的后缀 说明整型常量是无符号的情况时,经典C不提供U(或u)后缀,而且说明浮点常量作

为float型而不是double型存储时,经典C也不提供F(或f)后缀。在经典C中,L

(或l)后缀不能用于浮点常量。

long float 经典C把long float用作是double的同义词,而这种用法在标准C中是不合法的。

long double 经典C不提供long double类型。

转义序列 在经典C中不存在转义序列\a、\v和\?。而且经典C不提供十六进制的转义序列。

size_t 在经典C中,sizeof运算符返回int类型值。而在标准C中,它则返回size_t类型

值。

通用的算术转换 经典C要求把float型运算数转换成double型的,而且,经典C说明较短的无符号整数与

较长的有符号整数结合始终会产生无符号的结果。

第9章 函数

函数定义 在标准C的函数定义中,参数列表中含有参数的类型:

附录 C

597416 附录 C 标准 C 与经典 C 的比较

double square(double x)

{

return x * x;

}

经典C则要求在单独列表中说明参数的类型:

double square(x)

double x

{

return x * x;

}

函数声明 标准C的函数声明 (原型) 指明了函数参数的类型 (如果需要, 也可以有参数的名字) :

double square(double x);

double square(double); /* alternate form */

int rand(void); /* no parameters */

经典C的函数声明忽略了关于形式参数的全部信息:

double square();

int rand();

函数调用 当使用经典C的定义或声明时,编译器不检查带参数的被调用函数是否有正确的参数

数量和类型。此外,实参也不会自动转换成相应形式参数的类型。相反,执行整数

的提升,并把float型参数转换成为double型。

void 经典C不支持void类型。

第12章 指针和数组

指针减法 两个指针相减, 在经典C中产生int型的值, 而在标准C中则产生ptrdiff_t型的值。

第13章 字符串

字符串字面量 在经典C中,邻近的字符串字面量是无法连接的。而且,经典C不禁止字符串字面量的

修改。

字符串初始化 在经典C中,长度为n的字符数组的初始化式限制在n-1个字符之内(为结尾的空字符

预留空间)。而标准C允许初始化式长度为n。

第14章 预处理器

#elif、#error、

#pragma

经典C不提供#elif、#error和#pragma指令。

#、##、defined 经典C不提供#、##和defined运算符。

第16章 结构、联合和枚举

结构和联合的

成员与标记

在标准C中,每个结构和联合都有针对成员的自己的名字空间,且结构和联合的标记

会被保存在单独的名字空间中。而经典C为成员和标记采用单一的名字空间,所以成

员无法具有相同的名字(某些例外),而且成员和标记无法重叠。

完全结构的操作 经典C不允许对结构进行赋值、参数传递或函数返回操作。

枚举 经典C不支持枚举。

第17章 指针的高级应用

void * 标准C把void *用作“普通的”指针类型。例如,malloc函数返回void *类型的

值。而经典C则采用char *来达到此目的。

指针混合 经典C允许在赋值和比较中混合不同类型的指针。而在标准C中,可以把void *类型

的指针与其他类型指针混合,但是其他不带强制类型转换的混合是不允许的。类似的,

经典C允许在赋值和比较中混合整数和指针,而经典C则要求进行强制类型转换。

598

599 附录 C 标准 C 与经典 C 的比较 417

指向函数的指针 如果pf是指向函数的指针, 则标准C允许使用(*pf)(...)或pf (...) 来调用函数,

而经典C只允许使用(*pf)(...) 来调用函数。

第18章 声明

const和

volatile

经典C不提供const和volatile类型限定符。

数组、结构和联

合的初始化

经典C不允许自动初始化数组和结构,而且不允许初始化联合(不管存储期限)。

第25章 国际化特性

宽字符 经典C不支持宽字符常量和宽字符串字面量。

关键字 经典C不支持三字符序列。

第26章 其他库函数

可变实际参数 经典C不提供可移植的方法来写带可变数量实际参数的函数,而且缺少…(省略号)

符号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值