首页 > 国家标准(GB) > GB/T 15272-1994 程序设计语言C
GB/T 15272-1994

基本信息

标准号: GB/T 15272-1994

中文名称:程序设计语言C

标准类别:国家标准(GB)

英文名称: Programming language C

标准状态:现行

发布日期:1994-12-07

实施日期:1995-08-01

出版语种:简体中文

下载格式:.rar.pdf

下载大小:8722716

标准分类号

标准ICS号:信息技术、办公机械设备>>35.060信息技术用语言

中标分类号:电子元器件与信息技术>>信息处理技术>>L74程序语言

关联标准

采标情况:ISO/IEC 9899-1990

出版信息

出版社:中国标准出版社

书号:155066.1-11699

页数:平装16开, 页数:190, 字数:390千字

标准价格:33.0 元

出版日期:2004-07-25

相关单位信息

首发日期:1994-12-07

复审日期:2004-10-14

起草人:金益民、陈平、冯惠、孙玉、方段祥、黄嘉启、周明德

起草单位:西安电子科技大学

归口单位:电子工业部标准化研究所

提出单位:中华人民共和国电子工业部

发布部门:国家技术监督局

主管部门:国家标准化管理委员会

标准简介

本标准规定了用程序设计语言C书写的程序的形式及其解释。注:设计本标准的目的在于促进C程序在各个数据处理系统之间的可移值性。本标准的主要使用对象是实现者和程序员。与本标准相关的一个基本文件解释了制定本标准的技术委员会的许多决策。本标准规定了:——C程序的表示;——C语言的语法和约束;——解释C程序的语义规则;——由C程序处理的输入数据的表示;——由C程序产生的输出数据的表示;——对遵从标准的C实现的限制和限定值。本标准对以下内容未作规定:——为数据处理系统使用而对C程序进行变换的机制;——为数据处理系统使用而调用C程序的机制;——为C程序使用而对输入数据进行变换的机制;——在C程序产生输出数据后对其进行变换的机制;——将超出任何特定数据处理系统或特殊处理机容量的C程序及其数据的长度与复杂性;——对能够支持一个遵从标准的实现的全部最低要求。 GB/T 15272-1994 程序设计语言C GB/T15272-1994 标准下载解压密码:www.bzxz.net

标准图片预览






标准内容

中华人民共和国国家标准
程序设计语言C
Programming languages—C
本标准等同采用了国际标准1S)/IF:9899—1990&理序设计话前CC引
CB/T 15272
IS0/1Rt: 9899 - 1990
随着新设备和扩展字符集的引入·标准中可能会增加新的特征在语言和库网章中的们关条文对实现者和程序员使用尽管本身是合法的,但可能与示水增加的内容相冲突的特征给山了诫,有些特征属于将逐晰度弃的,这意味着在末来的标准版本中可能会撤消这此特征。本标准支忙中仍然保留它们的原因是这些特征已使用得很广泛,但不鼓励在新的实现中使用这与实现存美的特征,或在新的程序中使用这些话言特征(见6.9 条)或库特征(见7.13条)。本标准文本分为下列匹个主要部分:州和基本素:
翻译与执行( 理序的环境的特性语言的语法、约束与语义:
阵设施。
在有些茶文中,给出了示例以说明所描述的构件的可能形式,加注以强调在相应条文或示准的其他地点所描述的规则的作用:涉及其他相关条文时给出了引用。附录部分总结了包含在标准中的借:引当、示例、注,引用和附录均不属于标准的组成部分。第6 童语言是从\The C Reference Manual\中派生的.第7章库是基FC用户协会1984年的标准(1984/usi/gruup5tandlard)。:主题内容与适用范围
本标准规定了用程序设计语言()书的程序的形式及H解释。注:设计本标准的目的在于促进心程序在各个数据处理系统之间的可移摘性。本标难的主要使冯对案县其现者和程序员与本标准相关的“基本文件解释「制定本标准的技术愛员会的许多决策,本标摊规定了:
-—C程序的表示1
C语言的语法和约束:
解释(C程序的语义现则,
出程序处理的输入数据的表示;
由 C 程序产生的翰出数据的表示;对遵从标准的C宝即的限制和限定值。本标雅对以下内容不左规定:
为数据处理系统便用施对C程序进行变换的机制;为数据处理系统使用而谢用程序的机制;国家技术监督局1994-12-07批准1995·08-01实施
GB/T 15272—94
“为(程序使用而对输入数据进行变换的机制:在C程序产牛输出数据后对其进行变换的机制;一将超出征何特定数据处理系统或待殊处理机容量的C程序及其数据的长度与意杂:能够支持一个遵从标准的实现的全部最低要求。2引用标准
GB1988信息处理信息交换用七位编码字符集GB5271数据处理词汇1
GH12406表示货币和资金的代码
ANSI/IEEE754—进制浮点运算2
3定义和均定
本标准中,动词“应\解释为对实现或程序应提出的要求。反之,动词\不应\解释为应禁止下列定义适用于本标准。在本标准中显式定义了的术语,不能被假定为隐含在其他地方定义的类似术语,在系标准中未定义的术语应按GB 5271解释,3.1 对齐 alignmen
指特定类型对象应放置在存储区边界的要求,该边界的地址是字节地址的特定倍数3.2 实您 argument
指函数调用表这式中由括号括起米诈以逗号分隔的表中的表达式,或类似函数的宏调用中由括号括起求并以逗号分隔的表中的系列预处理单词。也称“实在参数”,3.3(—进)位hit
执行环境中的数据存储单位,它应大到足以容纳一个可能其有两种值之一的对象。不要求能表达一个对象中每个各别位的地址。
3.4字节byte
数据存储单位,足够人以容纳执行环境中基本宁符集的任何-·个成员。应能唯衣达一个对象中每个各别字节的地址。学节由一系列相邻接的二进位组戒,字节中二进位的数目山实现定义。字传的最低有效二进位称为低位,最高有效二进位称为高位。3.5符 character
-个字节内能容纳的二进位表示。源不境和执行环境的基本字符集中的每个成员的衣示都应能被容纳在一个字节内。
3.6 约束 constraints
进一步解释语言元素评注的语法或语义限制。3.7诊断消息diagnostiemessage实现输出消息「集!的·类消息,是实现定义的。3.8提前引用的条文farward reference对标准中包含与当前条文相关信息的后续条文的提前引用。3.9 实现 ilementatian
一个特定的软件集合,它运行在一个受到特殊控制任选的特定翻译环境,为一个特定执行环境实现采用说明:
等同采用IS02382,在术标准第3章出现。1jGB 5271
2]ANSI/IEEE754在本标准第5章出现CE/T15272--94
程序的翻译,并支持函数在该执行环境中的执行。3.口实现守义的行implemeniation-drfined hehavin指对依赖于实现特性的、且是正的理序构件和数据的行为。每个实现对这些行为均应明义瑞说明。
3.11实现就定的限定值implemcnialionlimits实现对强序所规定的限定位。
3.12地域桦定的行为lkcele-speeifiebehavioi指依赖下地域、国别.文化和语言可惯的行为.每个实现对这些行为均成用文档说明3.13多字节字符multihyte chnrart由一个或多个字节构成的序列,表示源坏境或执行环境中扩展字符集的…个成员。扩展字符集是基本字符集的超集。
3.14 刘象object
执行环境中的数据存储区,其内容表示值。除笠段以外,对象由个或多个邻接的字节组成,对象的字节数目饮序、编码或老显式规定或者由实现定义。当被引用时,对象可被解释灼具有特殊炎型死6 2. 2. 1 条)。
3.15形参
parametet
一种对象,足明为具有入口值的晰数卢明蜕隔数定义的一部分,或是紧跟在类似隔数的宏距义的宏名之店,由括号括起来并以遵号分隔的表中的标认符,也称“形式参数”。3.16未定义的行为undefinedbehavior指当使用了个不可移植的或是错误的程序构件:或错误的数据,或无法确定值的讨象时的!为,前标准并未对这些行为加以规定,所充许的对术定义的行为的处理包括;尽管可能出现不可预测的缩果,也完全忽略该情况:在翻译或战程序执行时按环境文档规定的特能处理(不保证出现诊断消愚:整翻译或执行(保证出现诊断消息)若违反了在约束条文以外北现的\应”或\不应\要求,则该行为是未定义的,其他末是义的行为在本标准文本中用文了“未定义的行为”,或由省略任何显式的行为定义来指示.对这三种情强不强渊让何区别,它们部描\没有庭义的行为”。3. 17未规定的行为unspecilied behaviar指标准未提出任何要求的且是正确的程序构件或数据的行为。示例
谢数实参求值的顺序是种未现定的行为。h.
整数溢出时的行为是-种未延义的行为。有符号整数右移时高位如何传递是-种实现跨义的行为。对亲26个-小写英文字母外的学符,islwe工函数是件返向真值是一钟地域特定的行为,d.
提前引用的条文:逐位移位算符(6.3. 7条),表达式(6. 3 条),函数调用(6.3. 2. 2 条).断数 1.aliWcr(7. 3. 1. 6 条).本地化程序库前导文卷(7,4 条)。4一致性
一个格学研(款雄强存应当只使月本标准中规定了的那些语言和库特征,它不应产生依颈未规定的、变未定义的、或实现所定义的行为的输出,也不应超出任何实现规定的最低限定值遵从(标整形)实现有两种形式:循上型和独立型。个宿方型避从实现应当接受任间严格遵从的程序。一个独这型遵以某现成当接受任何严格遵从的程序,该程中对在本标雅第?“库“中竭定丁的转证的使用与标难前导文着lorit.t)、limilr.li)、(sitarz.h>和(stddef.h>致。个遵以实现可以有扩展(包括附加的库幽数),只要这些扩展不改变严格遵从程序的任何行为。..comGB/T 15272—94
遵效差序是指遵从实现可接受的理序,注:D这意味著:个遵从实现尔得保留除本标准中显式规定保闲的标识符以外的正何标识符您预期严格遵从程序在各遵从实现之问与最大限度的可移植性,遵从程疗可能会袋赖下避从实现的基点非可移植柜特征
一个实现应附有定义所有实现定义特征及其扩充的文档。提前1用的条文,限定值前导文卷(flout.h)和(7.1.5条).变长实参库前导文券(7.8条).公用定义库前导文卷(7.1.6条)。5环境
实现分别在两个数据处理环境中翻评(源文卷并执行C程序,在本标准1和分别称亡们为翻泽环境划行环垒。它们的特性定义,并约束按照遵从实现的语法和语义规则所构造的遵从(程序的执行结果。
提前引用的条文:在第5章“环境\中,仪给出「许多可能的提前引用的茶文中的小部分。
5.1概念化模型
5.1.1翻泽坏境
5.1.1.1程序结构
个C程序并不定要全都在间一时刻翻评。程序文本存放在本标准中称为源女卷的单位啦,个源文卷连同经预处理指示#intludle并入的所有前导文卷和源文卷,扣除由杀件井入预处理指示所跳过的源程序行后,称为个翻举单位。以前翻译过的翻译单位可单独保伴或存在库中。·个程序的各个翻译单位之间通过例如对标识符具有外部链接的函数的调用,对标识符具有外部链接的对象的操作或对数据文卷的操作等手段进行通信,翻译单位可以先分别翻译,然后链接产生一个可执行的程序提前引用的条文:条件并入(6.8.1条),标识符的链接(6.1.2.2条),源文卷并人(6.8.2条)。5.1.1.2翻译阶段
翻译的语法规则之间的优先顺序山下列阶段规定:阶段1.若有必要,则将物理文卷字符映射到源字符巢(对行距指示符引人新行符)。用相应的单字符内部表示替换三联符序列。阶段2.删除每个反斜线字符后紧跟一个新行字符的字符对、分割物理源程序行以构成逻辑源程序行。不为空的源文卷应以一个新行字符结束,该新行字符前不应有紧接的反斜线字符阶段3.将源文卷分解为预处理单间和一系列的白空类符(包括注释)。源文卷不应在不完整的预处理单词或注释处结克。对每条注释郁用一个空格字符替换。保留新行字符。对除新行外的不为空的系列白空类符的处理是保留还是用个空格字符替换由实现定义,阶段4.执行预处理指示,展开宏调用。include预处理指示将导致递归地从阶段1到阶段4处理命名的前导文卷或源文卷。
阶段5.将第一个源字符集成员以及字符常量利串字面值中的转义序列转换为执行字符集中的战员。
阶段6.串接邻接的字符串字而值单词和邻接的宽串字面值单词,阶段7.此时分隔单词的白空类待不再有意义。每个预处理单词都转换为个单词。对如此得到的单间进行语法分析和语义分析并加以翻译。阶段8.解决所有外部的对象引用和函数引用。链接有关的库成分以满足对未在当前翻译单位内定义的对象和函数的外部引用。将所有这类翻译程序的输出收集到一个程序映象中,该映象包含了在其执行环境中执行时所的信息
注:即使在实中常常把几个阶段合并在起,但实现必须表现为同这些阶段分出现样,2;如在6. 1 条中所摧述的,将源文差字符分解为预处理单词的过摄是[:下文相关的。作为例了,消参见在..comnludi丽处理指中对的外理。
GB/T 15272- 94
提前川用的条文:词法元案(6.1策),预处理指示16.8条),三联符序列(5.2.1.1案)5. 1. 1. 3诊晰
个遵从实现对每个违反任何语法规则或约束的开单位应至少以一种实现定义的方式产生:一条诊断消息。在其他情况下,不需产生诊断消息,注,当的是实现应标识每个违约的性质,并尽可能定位。当懿,只要对一个合法的程序们在班行止确的翻译现就可自由池产坐任意数日的诊断消息。实现也可成功地翻译-一个不台法的程序。5.1.2执行环境
共定义了两种热行坏境:立环始与疗去环始,在两种坏境中,当由执行印境调用一~货范的(函数时,都发生序疗多,在程享府动前应对在静态存储区中的所有对象进行努绝!既为它门的划宜),这种初始化的方式利定时在其他地方都未规定。强序练止把控制返回给执行环境提前引用的条文:初始化(6.5.7条)。5. 1. 2. 1 独立环境
在独文环境.即(程序在其中的执行无需操作系统的干何支持的环境中,程序许新时调用的数的名字和类型是实现定义的,除此以外再元保留的外部标识符。独立程序可用的任何所设施都是实现定义的。
在独文环境中,程序终止的效果也是实现定义的,5.1.2.2循主坏境
不定需要提供后主环境,但荐提供.则应遵从下列规格说明.5. 1. 2. 2. 1 程序启动
程序启动时调用函数命名为mai。实现不必声明此函数的原型。它可被定义为不带形参:Ent main(void)I/ *.* /)
战老带两个形参;
int main(int argc, char * argv[J) I/ *..# /}尽曾在此使用『名字argc和argv,作由于它们局部于声明它们的函数,因此可使用任而;名。定支了函数mrin,则其形参应遵循下列约桌:ar的值不应为负值;
-argv_argc应为一个空指针:
一芳arg:的值人于零,则数组成员 arg[o]至argv[argc-1]应包含指向串的指计.由循十境在程序启动前把实现定义的值赋给这些串。这样做的月的是向程序提供由宿主环境的其他部分在样序店动前确定的借息,若宿七坏境不能提供大小写字母并存的串,则实现应保证这些串以小培宁母接收若argr 的值大于签,则由argv_o]所指向的串表示序名。芳不能从宿主坏境获得程名,则argv_o]o应足空字符,若arge的值人于1.则由argv[1至argv[argc-1所指向的长小序参数。形参argc和argv以及出argv数组所指向的申应是可出程序修改的,并保持以程乎启动至程字终止期间最后··次存储的值:5. 1. 2. 2. 2程序执行
在宿主环境,程序可使用第?章\库\中拼述的所有函数、案、类型定义和对象。5. 1. 2. 2. 3程序终止
从对函数 main的初始调用小返回等价于用函数 main 的返回值作为实参调用函数exil。老函数main 执行-个不规定值的返回操作,则返回到缩士环境的终止状态是未定义的。提前叫用的条文术语定义(7.1,1条),函数exit(7.10.4.3条)。5. 1. 2. 3 程疗序执行
本标准中的语义猫述说明了一个抽象机的行,在该抽象机中,不涉及优化问题。CB/T 15272--94
访问易变型(volatile)对象,修收对象,修收文卷或调旧执行上述任何操作的两数都楚融作问它们是放行环境的状态变化。对表达式求值可能出现副作用。在执行序列中称为序点(变达求值的额序会谢点的某些特定点,所有先前求值的副作用岛应完成,并且后继求慎所需的副作用不应在此之前发生。在抽象机中,所有的表达式都按语义规定求值。若某个实际实现可以推断出尚不用其个表达式的值也不用产牛必须的副作用,包括调用晒数或访问易变型对象所引起的任何副作用,则该实现川不必对该表达式的任何部分求值。
当抽象机的处理由于收到一个信号而中断时,仅能依赖作为上个序点的对象的值。在上--个序点和下一个序点之间可能被修改的对象不一定已接收到它们的正确值。在进入白动存储期的对象所在的程序块时,对每个自动存储期的对象都产生一个与之柑关的实例。这类对象在该程序块执行时以及在该程序块由于调用函数或收到一个信号而挂起时存在并保持其最后存储的值:
对一个遵从实现的最低要求是:一当在序点时,易变型对象在前面的求值已完成且后继求值尚未发生这种意义上是稳定的。\一-当在程序终止时,所有已写到文卷中的数据应与按抽象语义执行程序时所应该产生的练果相同:
交互设备的动态输人辅出应按7.9.3条所规定的发生。提出这些要求的目的是使元缓冲的或行缓冲的输出尽可能早出现,保证在程序等待输人以前已实际出现提示消息。变互设备的组成是实免定义的。抽象培义与实际语义之问更严格的对应关系可由每个实现定义。示例
实现可在抽象语义与实际语义之间定义一一对应关系,在每个序点,实际对象的值都与由抽象a.
语义规定的对象的值一致。此时关键字volatile将是几余的。或者,实现也可在每个翻译单位内部进行各种各样的优化,使得仅当进行跨越翻译单位边界的丽数调用时实际语义才与抽象语义致。在这类实现打.对于土调数和被调两数在不同翻详单位中的情况,当每次进入函数和由函数返回时,所有外部链接的对象的值和所有可通过指针访问的对象的值格与抽象语义一致。而几,在这类函数入口时,被调函数的形参值及所有可通过指针访问的对象的值将与抽象语义--致。在这类实现中.由函数 sighal激发的中断服务例行程序所引用的对象将需要volatilc 存储的显式规格说明,以及其他实现定义的限制。h.执行下列程序片断
char tlic2;
*-- *
crl+c2;
对,“整型于-格\要求抽象机先将每个变量的值升格为int的尺寸,再将两个 inl量相加,然后截断其利。只要能对两个char型量相加且不产生溢出异常,则实际执行只需产生相同的结果,可以省略升格。c:类似地,在程序片断
flcat f1,12:
double d;
f=f2 * d
中,若实现可保证结果如同采用双精度运算执行(例如,用常量2.替换d,该常量的费型为doubie)一详,则可用单精度运算执行乘法,或者.如果既不会超出值域范围也不会失去精度,那么仅涉及itit或iloa1 的运算也可使用双精度运算执行。d为了解释表达式组合的行为,在下列程序片断int a, b;
#=a+32760+b+5+
GB/T 15272--94
中,由于加法算符的结合律与优先级,上述表达式语句的表现确实与语句=(((a+32760)+b)+5);
相同。即“(a十32760)\的结果与b相加,圳得的结果再加上5,得到赋了予的值。在举出将产生异常、目inl可表示的值的范围是[一32768,+32767]的机器上,实现不能将上述表达式重写为:a=((a→b)+32765);
因为若a和b的值分别为一32754和一15,则和a十b将产生个异常,而原先的表达式则不会。述表达式也不能重写为:
#=((a+32765)+b);
a=(a+(b+32765));
因为a和b的值可能分别为4和一8或一17和12。然而在溢出不产生异常且溢出的结果叮逆的机器上,实现可将该表达式谱句重写成上述任何一种形式,因为它们全都会得到同样的结果,表达式的组合不完全快定它的求值。在下列程序片断e.
#inelude (stdin. h)
intsum;
char *p:
=sum # l0-*g* +( *F++=gctchar())+sum:
中,该表达式语句如同写作;
sum=(((sum # 10)--*0')+((*(p++))=(getchar(0)));一样组合。但p的实际增量可以在前一个序点和下个序点(分号;)之间的任何时间出现·而对函数getchar 的调用可在需要它的返间值之前的任何时刻出现。提前引用的条文:复合语何或块(6.6.2条),表达式(6.3条),文卷(7.9.3条),序点(5.3条.6.6条),函数sighal(7.7条),类型限定词(6.5.3条)。5.2有关环境的考虑
5.2.1字符集
应定义两个字符集及与它们相关的理序序列:用于书写源文卷的字符架和在执行环境中解凝的字符集。执行字符集成员的值是实现定义的;任何在本条要求之外的附加戏员均是地域特定的。在字符常量或申字面值中,执行字符集中的成员应当用对应的源字符集成员或者用由…·个反料线学符\\后紧眼一个或多个字符所组成的转义序列来表示。在基本执行字符集中应有-个其字节的所石位均替为0的,称为空字符的字符。空字符用来终止一个字符串字面值。基本源字符集和基本执行字符集均应至少具有下列成员:英文宁母表中的26个大写宇册
QRST
英文字母表中的26 个小写字母
10个十进制数字学符
下列 29 个图形字符
GB/T 15272 94
再加上空格字符以及表示横向制丧、纵问制表和换页的控制字符。在源字符集和基本执行字符集中上述十进制数字字符表中0之后的每个字符的值均,必比前一个学符的值大I。在源文卷中,应有某种方式指示每:-行正,文的结束。本标准将这种行尾指示符按单个新行字符处理。在执行字衍中,应有表示告警、退格、回车和新行的控制字符。若在源文卷中遇到除出现在字符常量、串字面值、前寻文卷名,注释或水不被转换为单词的预处理单讨中的字符外的其他字符,则其行为是未定义的,
提前引用的条文:字符常量(6.1.3.1条),预处理指示(6.8条),串字面值(5.1.4条).注释(6.1.9条)。
5. 2. 1、 1
三联符序列
下列三个字符的序列称为三联符序列。它们在源文卷中的所有出现都用对应的单了符替换,??
不存在其他的三联符序列。对不是开始上述三联符序列之一的?不作改变,注三联符序列使得可以输人未在 GH 1988 中定义的字符。(iH 1988 是-L:位代码集的一个于集。宗例
下列源行
prin(\Eh??? /n\);
在替赖三联符序列?/后成为:
Hrintf(\Eh? In\)
5.2.1.2多字节字符
源字符集中可包含多字节字符,用于表示扩展字符集的成员。执行字符巢也可包含多字节字符。但它们的编码不定要与源字符集中的多字节学符的编码相同。下列条件对两个字衍集均应成立:应包含在5.2.1条中所定义的单字节学符。任何附加成员的存在,含义和表示均是地域特定的。一个多字节字符可具有依费于状态的编码。每个多字节字符序列以一个初始转必状态始,当在宇列中遐到特定的多字节字符时进入其他实现定义的转义状态。当处在初始转义状态时,所有单字节字符均保持它们通常的解释,且不改变转义状态。序列中后继宇节的解是当前转义状态的函数。-所有位乌为0的字节应独文下转义状态,一概解为窄宁符所有位均为0的字节不应作为多字节字符的第一个或后继的字节出现,对源字符集,下列条件应成立:注释、申字面值、字符常量或前导文卷名均应以初始转义状态开始和结束。一注释、串字面值、字符常量或前导文卷名均应由合法的多学节字符序列组成。5.2.2字符品示语义
满动置是指在显示设备上由函数「P非:输出的下一个字符应出现的位置,把-个可印谢的(如由GB/T 15272 94
函数isurint所定义的)字符考列显示议备[的口的是在活动位再上显示该字符的图形表小,然后将活动位置握进到当前行的下一个位。写的方向是地域特定的。若活动位已处在行的最后个位,其行为是米规定的。
表示执行字符集中作图形字符的字母转义序列的作用是在显示设备上产牛下列动作:a(告费)产生一个可听或可视的告紧信息。不应改变活动位肾。6《退格将活动位移雀当前行的前个位件。若活动位置已处丁当前行的起始位置,则其行为是规定的,
(换实将活动位置移尘下个翌辑质拍物起始位置初(新疗)将活动优笠移至下:行的起始假置。(创车)将活动位详当前行的起始位置。(磺尚老)将活动位露至当前行的下·个横问表格位置。若活划位置已处于或过所定义t
的最后:个横问表格位置,谢其行为是未规定的。)(纵向制态)将活动位皆移至当前行的下一个纵向丧格起始位暨,若活动位冒已处于或越过所定义的最后个级向表格位置,则其行为是未规定的。这些转义序列中的每一个应产垒-一个实晚定义的唯一值·该值应能存储在单个ch型对象中,它们在文朴文卷中的外部表示不必与内部表示全相写,且已超出木标准的范同。提前引用的条文;函数 Iputc(7. 9. 7. 3条),函数 isprint(7.3. 1. 7条)。5.2.3信号与中断
隔数应当这样实所:它们在任何时刻均可叮被一-个信号中断,或比-个信号处理程序调用,!或者兼可.并正在断后不改变早些时候的、供仍活动着将调用者的控制流,也不改变丽数的返值或自动存储期的对象。所有这类对象均应按每次调用为基础保存在数赖家,门组放函数的叫执行表示的指令之外。
不保证弥雅库中的函数能再入,并且它们可能惨改静态存储期的对象。5.2.4环境限定值
翻译环境和执行环境二省均约束语言翻泽程序和库的实现。下列系文总结了环境对遭从实现所施的限定值
5.2.4.1翻详限定值
实现应至少翻译片执行一个程序,孩释序减卒少过含下列每限定值的,个实例比:实现应尽可能避免施加定的翻评限定俏复合语包、循环挖制结拘和选择控制结构的嵌黛层饮允许为15层。::条件并人的眠套层次充允许为8员可以12 个指针、数组和函数声明符(它们可以任何方式组合)修改声明中的算术,构、联合不完整类型,
企-个完全的声明符中,加括孕的声明符的嵌套层次允许31层。在一个完全的表达式中,如括号的表达式的嵌套层次允诈32层。一内部标识符或宏名1前1个字符有效。.外部标识符中前6个字符有效,一个翻详单位内可有51!个外部标识符。在-个块内古明的具有映作用喊的标识符允许有127个,在个翻译单位内允许同时定义1024个宏标识符。一·个晰数定义非允诈有个形参。一个隔数调用允许行个实参。
\·个宏定义中允许有31个形参GB/T 1527294
个发调用中充许有31个实态.
-个逻辑源行中允许有509 个字符。(在接后)一小字符中字面值或兜串字面值中允许有509个字符。一个烂象允许占32767个字节(仅对宿主环说)。一#include的文卷允许嵌套8层。个switch语中允许有257个casc标号(不包括联套的switch语有中的case标号),:单个结构或联合允许有127个成员。单个格举充许右127个举常革,
单个结构声明表中允许有15层嵌套的结构或联合定义。5.2.4.2数值限定
遵从实现应用文档说明在本条中规定的所有限定值,这些限定值将在前导文卷5.2.4.2. 1整型的尺寸(limits.h)应使用在#iI 预处理指示中所用的常量表达式替换下面所列出的值。而且除 CHAR THIT 和 MBLENMAX外,应由表达替换,替换用的表达式的类型与按整型升格将-一个对应类型的对象转换成的表达式的类型相同。它们的实现定义的值应在量值(绝对值)上等于或大于所示的值,且符号与所示值的符号相同。
不是位段(字节的最小对象的位数:CHAR_BIT
signedchar类型对象的最小值:SCHAR_MIN
signed char 类型对象的最大值:SCHAR_MAX
unsigned char类型对象的最大值:Uchar. Max
char 类型对象的最小值。
见下面
char类型对象的最大值:
CHAR_MAX
见下面
对任何所支持的地域环境,一个象字节字符的最大字节数:MI_1.EN_MAX
sharr int类型对象的最小值:
short int类型对象的最大值:
SHRT MAX
+32767
unsigned short ir.t 类型对象的最大值:65535
USHRT_MAX
int类型对象的最小值:
INT MIN
-32767
-int类型对象的最人值:
+32767
unsigned int类型对象的最大值:UINT MAX
longint爱型对象的最小值:
LONG MIN
GB/T 15272-94
2147483647
long int 类型对象的最人值:
LONG MAX
+211718361
usigiedleong ini类型对象的最人值:ULONG MAX
4294967295
若在表式中使用时对char类型对象的值按有符号整数处理,则 CHARMIN的道应与S:HAR MIN 的值相同,H CHAR MAX 的值应与 SCHAR MAX 的值相同,否则,CIAR MIN 的值虚为.而CIAR.MAX的值与LHARMAX的值相同(见6.1.2.5条)。5.2.4.2.2浮点数的特性:loat.h)浮点数的特殊用表示浮点数和值的模塑描述,该模型提供实现所使用的浮点运算的有关信:注;使川浮点模型的Ⅱ的在下使每个浮点待性的满述更为清晰,并不要求实现所使而的浮点运算。致定义每种泽点型时使用了列形参:符号(—1)
指数部分的基数!大于的数)
指数部分(较小值.和最大值之间的一个整数)精度(效数f的以6为基的数半位数)小于的非负整数(有效数位)
个规格化的浮点数若0.小0)用下列模型表示,=×
在<,flaat. h>前导文卷的值1,FI.T RA[IX 减是适合于在#iF 预处理指示中1恢用的常过表达式,所有其他的值则不必·定是常量表达式,除FL.T.RAIIX和FLT.ROUNDS以外的斯有值三种浮点类型均有分别的名字。除FLTROUNL外,对其他所有值均给了浮点模型表示。浮点加的舍入模型围FLIRL:N[S的值表征:-1Www.bzxZ.net
不可确定
含入为最接近的值
趋向正穷人
趋向负无穷大
FI.T_RJINDS的H他值表征实现准义的舍入行为,下表中列出的值应该用实现定义的,量值(绝对值)等十或大于所小值且符号拍同的表达式替换—指数部分的基数为
FLI RAJJX
浮点有效数中的以 FI,T RADIX 为基的数字该数 pFIT.MANT ..IG
DBI.MANT DIG
LDEL MANT DIG
「进制数字α·使得一个有个十进制数位的浮点数可命入为有个以b为基的数位的浮点1,若是 10的幂
数H反变换行不会收变该个+进制数字(—1)xlage1+1o,否则
LDBI._DIG
GB/T 15272--94
-使得 FLT RAI)IX 的该次录一1 是一个规格化浮点数emin的最小负整数FLT. MIN. EXP
DBL MIN EXP
1.I._MIN_EXP
使得10的该饮是规格化浮点数数值范谢[1ogum-1的最小负整数FLTMIN.10.EXF
DBILMIN..1O EXP
LDBLMIN1OEXP
-使得FLT_RADIX的该次需-一1是可衣示的有穷规格化浮点数的最大整数FLT-MAX. EXF
DBI...MAX EXP
LDBL MAX EXP
使得10的该饮靠是可表示的有穷规势化浮点数数值范用ilog1((1--t-\)×6*mxj的最大整数FLT-MAX 10.EXP
DBL.MAX10EXP
LDBL MAX 10 EXP
下表中列出的应该用实现定义的、值等丁或大丁所示销的表达式替换最大可表示的有穷点数(1-)
FLT_ MAX
LDRL-MAX
下表中列出的值应该用实现定义的、值等于或小于所示值的表达式替换:与在给定浮点类型中可表示的大于的最小值之间的差引FLT EFSILON
DBL EPSILON
LL_EPSHLON
1E—9
规格化的最小正浮点数!
FLI MIN
DHL -MIN
LDR.-.MIN
1E—37
下面描述一个满足本标准最小要求的人为浮点表示,以及在(floal.h)前导文券中适合于fleaata.
类型的值:
T=5×16°
FLT .RADIX
× 16-k
FIT_MANT DIG
FLT_EPSILON
FIT-MIN..EXP
FLT_MIN
- 31 ≤+ 32
9.53674316E-C7F
2. 03873588E - 39F
小提示:此标准内容仅展示完整标准里的部分截取内容,若需要完整标准请到上方自行免费下载完整标准文档。