C安全规范
机械安全标准c类

机械安全标准c类机械安全标准C类是指在机床安全标准中属于最高级别的标准,主要用于对高风险机械设备进行安全评估和规范。
1. 机械安全设计原则:C类标准要求机械设备在设计过程中考虑到人员的健康和安全,从而避免与机械设备有关的意外事故。
设计原则包括:a) 机械设备应具备必要的安全保护措施,如防护罩、安全开关等;b) 设备的安全性能要符合特定的国家或行业标准;c) 设备操作人员应接受必要的安全培训和教育。
2. 机械安全控制系统:C类标准要求机械设备配备先进的安全控制系统,以保证设备运行时的安全性。
安全控制系统应包括但不限于以下内容:a) 安全开关和紧急停机按钮的设置和布置;b) 安全门的设计和安装;c) 安全光幕、安全激光扫描器等辅助设备的配置;d) 安全电路的设计和实施,如电气隔离、断线检测等;e) 安全控制逻辑的设计和验证。
3. 机械设备的安全特性:C类标准要求机械设备具备一定的安全特性,以防止意外发生。
包括但不限于:a) 防护罩和护栏的设计和安装,以避免人员接触到危险区域;b) 设备配备安全传感器,能够监测人员的位置和动作,及时发出警报或停机;c) 设备应具备足够的稳定性和强度,以防止机械设备在工作过程中发生倾倒或爆炸等事故;d) 设备应具备防火、防爆等功能,以适应特殊环境的需求。
4. 安全操作规程和培训:C类标准要求制订安全操作规程,并对操作人员进行安全培训和教育。
安全操作规程应包括但不限于以下内容:a) 设备的正确操作方法和步骤;b) 对设备进行日常维护和保养的要求;c) 预防事故和应急处理的措施;d)对设备可能存在的危险情况进行分析和识别;e) 人员意外伤害的防范和急救方法。
5. 机械设备的检测和验证:C类标准要求对机械设备进行定期的检测和验证,确保设备的安全性能达到标准要求。
检测和验证内容包括但不限于:a) 设备的机械结构和电气系统的检查;b) 安全开关和保护措施的功能性检验;c) 安全控制系统的性能验证;d) 对设备进行负载和应力测试;e) 安全操作规程和培训的评估和检查。
YYT0316-2016标准.附录C安全特征问题清单讲解

明确提取和供给的方式和参数值及如何进行控制。
C.2.7
医疗器械是否处理生物材料以用于随后的再使用、输液/血或移植?
宜考虑的因素包括处理的方式和处理的物质(如自动输液/血、透析、血液成分或细胞疗法处理)。
生物材料先经过一定方式处理,达到一定要求,再次使用或会输到人体。
如:尿毒症患者需将血液经过过滤器,返回到人体;
生化试剂类对温度敏感;有些试剂运输要有冰袋保护;
无菌类产品对运输和储存环境敏感;
有些机电类产品受到其他信号干扰,可能不能正常工作。
C.2.16
医疗器械是否影响环境?
宜考虑的因素包括:
—对能源和致冷供应的影响;
—毒性物质的散发;
—电磁干扰的产生。
从MD发出的:声、光、电磁、辐射、各种有毒物质等,比如:
C.2.22
医疗器械承受何种机械力?
宜考虑的因素包括医疗器械承受的力是否在使用者的控制之下,或者由和其他人员的相互作用来控制。
物理拉力、扭矩、压力、摩擦力等。
内窥镜器械需要人为送入;
C形臂X线机定位由电机控制,驱动异常时可能有手动调节装置。
C.2.23
什么决定医疗器械的寿命?
宜考虑的因素包括老化和电池耗尽。
常见的灭菌方式:EO、辐照、湿热、无菌加工技术等;
特别需明确内包装方式。
储存寿命我们常说有效期,和使用寿命有区别;
可重复灭菌产品需明确方法、次数;
非无菌提供产品应明确使用者对其灭菌方式,非预期方式对其影响要考虑。
C.2.9
医疗器械是否预期由用户进行常规清洁和消毒?
宜考虑的因素包括使用的清洁剂或消毒剂的类型和清洁周期次数的限制。医疗器械的设计可影响日常清洁和消毒的有效性。另外,宜考虑清洁剂或消毒剂对器械安全和性能的影响。
CCRC ISV C 信息安全服务规范

文件编码:CCRC-ISV-C01:2018信息安全服务规范2018-05-25发布 2018-06-01实施中国网络安全审查技术与认证中心发布目录1. 适用范围 (1)2. 规范性引用文件 (1)3. 术语与定义 (1)3.1. 信息安全服务 (1)3.2. 信息安全风险评估 (1)3.3. 信息安全应急处理 (1)3.4. 信息系统安全集成 (1)3.5. 信息系统灾难备份与恢复 (1)3.6. 软件安全开发 (2)3.7. 信息系统安全运维 (2)3.8. 网络安全审计 .................................................................................. 错误!未定义书签。
3.9. 工业控制系统安全 (2)4. 通用评价要求 (2)4.1. 三级评价要求 (2)4.1.1. 法律地位要求 (2)4.1.2. 财务资信要求 (2)4.1.3. 办公场所要求 (2)4.1.4. 人员能力要求 (3)4.1.5. 业绩要求 (3)4.1.6. 服务管理要求 (3)4.1.7. 服务技术要求 (3)4.2. 二级评价要求 (3)4.2.1. 法律地位要求 (4)4.2.2. 财务资信要求 (4)4.2.3. 办公场所要求 (4)4.2.4. 人员能力要求 (4)4.2.5. 业绩要求 (4)4.2.6. 服务管理要求 (4)4.2.7. 技术工具要求 (5)4.2.8. 服务技术要求 (5)4.3. 一级评价要求 (5)4.3.1. 法律地位要求 (5)4.3.2. 财务资信要求 (5)4.3.3. 办公场所要求 (5)4.3.4. 人员素质与资质要求 (6)4.3.5. 业绩要求 (6)4.3.6. 服务管理要求 (6)4.3.7. 技术工具要求 (7)4.3.8. 服务技术要求 (7)5. 专业评价要求 (7)5.1. 风险评估服务资质专业评价要求 (7)5.2. 安全集成服务资质专业评价要求 (7)5.3. 应急处理服务资质专业评价要求 (7)5.4. 灾难备份与恢复服务资质专业评价要求 (7)5.5. 软件安全开发服务资质专业评价要求 (7)5.6. 安全运维服务资质专业评价要求 (7)5.7. 网络安全审计服务资质专业评价要求 (7)5.8. 工业控制系统安全服务资质专业评价要求 (7)附录A(规范性附录):信息安全风险评估服务资质专业评价要求 (8)附录B(规范性附录):信息系统安全集成服务资质专业评价要求 (11)附录C(规范性附录):信息安全应急处理服务资质专业评价要求 (14)附录D(规范性附录):信息系统灾难备份与恢复服务资质专业评价要求 (18)附录E(规范性附录):软件安全开发服务资质专业评价要求 (22)附录F(规范性附录):安全运维服务资质专业评价要求 (26)附录G(规范性附录):网络安全审计服务资质专业评价要求 (29)附录H(规范性附录):工业控制系统安全服务资质专业评价要求 (35)附录I:信息安全服务人员能力要求 (41)附录J: 参考文献 (64)1.适用范围本规范规定了信息安全服务提供者(以下简称服务提供者)在提供服务时应具备的服务安全通用要求和专业服务能力要求。
【安全开发】CC++安全编码规范

【安全开发】CC++安全编码规范C本质上是不安全的编程语⾔。
例如如果不谨慎使⽤的话,其⼤多数标准的字符串库函数有可能被⽤来进⾏缓冲区攻击或者格式字符串攻击。
但是,由于其灵活性、快速和相对容易掌握,它是⼀个⼴泛使⽤的编程语⾔。
下⾯是针对开发安全的C语⾔程序的⼀些规范。
1.1.1 缓冲区溢出避免使⽤不执⾏边界检查的字符串函数,因为它们可能被⽤来进⾏缓冲区溢出攻击。
下⾯是应该避免使⽤的函数。
同时,也列出了每个函数相应的⽐较安全的替换⽅式。
不使⽤strcpy(),使⽤strncpy();不使⽤strcat(),使⽤strncat();不使⽤sprintf(),使⽤snprintf();不使⽤gets(),使⽤fgets()。
在上⾯的前三个中函数中,每个替代函数的“n”表⽰了使⽤的缓冲区的⼤⼩。
最后⼀个函数的“f”,表⽰格式,它允许⽤户指定期望的输⼊的格式。
这些替换⽅程强制程序员定义使⽤的缓冲区的尺⼨以及确定输⼊的类型。
1.1.2 格式化字符串攻击该类攻击往往与缓冲区溢出相关,因为它们主要利⽤了某些函数的假设,例如sprintf()和vsprintf()假设缓冲区的长度是⽆限的。
然⽽即使使⽤snprintf()替换sprintf()也⽆法完全保护程序不受格式化字符串的攻击。
这些攻击通过直接将格式说明符(formatspecifiers)(%d,%s,%n等)传递到输出函数接收缓冲区来进⾏。
例如,以下的代码就是不安全的snprintf(buffer,sizeof(buffer),string)这种情况下,可以在字符串中插⼊格式说明符来操纵内存的栈,来写⼊攻击者的数据(这些数据中包含⼩的程序代码,并可由处理器接着执⾏)。
对以上的例⼦建议使⽤下⾯的代码。
snprintf(buffer,sizeof(buffer),“%s”,string)进⾏格式字符串攻击不太容易。
⾸先攻击者必须能获得内存栈的内容情况(或者从应⽤导出或者使⽤调试器),然后必须知道如何精确访问特定的内存空间来操纵栈中的变量。
安全规范标准

安全规范标准
首先,对于任何工作环境来说,必须要有清晰的安全规范标准。
这些规范标准
应该包括所有员工需要遵守的安全程序、紧急情况的处理流程以及必要的安全设备的使用方法。
这些规范标准应该由专业人员制定,并且需要不断地更新和改进,以适应不断变化的工作环境和法律法规的要求。
其次,所有员工都应该接受相关的安全培训,以确保他们了解并且能够遵守安
全规范标准。
这些培训应该包括如何正确使用安全设备、如何应对紧急情况、如何识别和报告潜在的安全风险等内容。
只有当员工具备了这些知识和技能,才能够保证工作场所的安全。
另外,定期的安全检查和审核也是确保安全规范标准得到执行的重要手段。
通
过定期的安全检查,可以及时发现和解决潜在的安全问题,防止事故的发生。
同时,对于违反安全规范标准的行为,也应该采取相应的惩罚措施,以起到警示作用。
此外,建立一个良好的安全文化也是非常重要的。
这需要领导者们树立榜样,
积极倡导安全工作,鼓励员工提出安全改进建议,并且及时奖励那些提出优秀建议的员工。
只有建立了良好的安全文化,才能够真正做到“安全第一”。
最后,要注重安全规范标准的宣传和普及。
通过多种形式,如张贴海报、举办
安全知识竞赛、定期举行安全培训等,让员工对安全规范标准有更深入的了解,增强他们的安全意识,从而提高整体的安全水平。
总之,安全规范标准是任何工作环境中不可或缺的一部分。
只有制定了清晰的
规范标准,并且得到了全体员工的认可和执行,才能够真正做到安全第一。
希望每个人都能够牢记安全规范标准,共同营造一个安全、健康的工作环境。
单柱车床型号C5116a的安全操作规范

单柱车床型号C5116a的安全操作规范安全操作规范的目的是确保单柱车床型号C5116a的操作人员在工作过程中对自身和他人的安全负责,并最大程度地减少事故和伤害的发生。
遵守以下安全操作规范将确保车床的稳定运行,同时保护操作人员的生命和财产安全。
一、操作前的准备工作1. 确保车床所在的工作区域清洁、明亮,并且没有杂物、油污或其他障碍物。
2. 确定车床床身和工作台上的所有螺丝、螺母、传动件等零部件都已正确装紧,无松动现象。
3. 检查刀具和夹具的装夹是否牢固,刀具是否锋利,夹具是否能正常工作。
4. 检查电源和开关是否正常,电气线路是否有裸露、断裂或磨损,防护装置是否完好。
二、个人安全措施1. 在操作车床前,操作人员应穿戴适当的工作服和工作鞋,不得穿戴过长的、松散的衣物或饰品,以防止被卷入旋转部件中造成伤害。
2. 操作人员物理条件良好时方可上岗,心理状态不佳、疲劳、酒醉或受药物影响时均不得操作车床。
3. 操作人员应经过专业培训,并了解车床的操作规程和安全事项,不得将其用于非法或不当用途。
三、安全操作规程1. 严禁在车床旋转时进行任何调整、清洁或维修操作。
2. 在车床操作过程中,必须保持双手干燥并使用防滑手套,以防止手部滑动。
3. 操作人员应注意长时间操作的疲劳,应适时休息,避免操作时精神不集中。
4. 操作人员应保持正确的姿势,稳定站立或坐下,以减少意外伤害的风险。
5. 在车床操作过程中,不得将工具或其他物件放置在车床上,以免干扰操作或造成不必要的风险。
6. 使用工作台、夹具或其他辅助装置时,应正确安装和固定,以确保工件的稳定和操作人员的安全。
7. 不得随意更改或调整车床的操作模式或参数,如工作台高度、进给速度等,以免造成意外事故。
8. 维护人员必须按照规定的周期对车床进行维护保养,不得擅自拆卸和改装车床的关键部件。
四、应急处置措施1. 操作人员应熟悉紧急停机装置的位置和操作方法,并在危险情况发生时立即按下停机按钮。
衣服吊牌标abc类标准

衣服吊牌标ABC类啥意思?
衣服吊牌上的A类、B类、C类,指的是纺织产品的安全级别。
顾客在挑选服装时,不仅要关注面料、款式、价格,更要关注服装属于哪种安全类别,这是穿得健康的重要指标。
根据2011年8月1日起实施的纺织产品基本安全技术规范,把纺织产品的安全级别分为A类、B类、C类。
同时针对不同安全级别的纺织产品,对甲醛含量、pH值、染色牢度、异味、可分解致癌芳香胺染料都做了具体的规定。
这三类纺织产品都要求无异味,禁用可分解致癌芳香胺染料。
A类:婴幼儿纺织产品应符合A类要求。
根据国家规定,年龄在36个月及以下的婴幼
知识点GB18401-2003中的“GB”是指的国家标准
FZ/T73018-2002B重达“FZ”指的是纺织类的标准
“/T”指的是这个标准是推荐使用。
食品安全等级c说明什么

一、食品安全等级c说明什么食品安全等级c达到了国家的标准,是可以放心食用的。
餐饮服务食品安全监督年度等级评定,由监督人员根据餐饮服务单位过去12个月期间的动态等级评定结果进行综合判定。
ABC表示的是年度等级,是12个月的综合评价。
年度平均分在9.0分以上(含9.0分),为优秀;年度平均分在8.9分至7.5分(含7.5分),为良好;年度平均分在7.4分至6.0分(含6.0分),为一般。
评定依据主要是《餐饮服务许可管理办法》、《餐饮服务食品安全监督管理办法》、《餐饮服务许可审查规范》、《中央厨房许可审查规范》和《餐饮服务食品安全操作规范》,其中后三者是主要依据。
食品安全等级c说明什么二、食品安全标准的性质是什么《中华人民共和国食品安全法》中规定:食品安全标准的性质是国家强制性的标准。
第二十四条,制定食品安全标准,应当以保障公众身体健康为宗旨,做到科学合理、安全可靠。
第二十五条,食品安全标准是强制执行的标准。
除食品安全标准外,不得制定其他的食品强制性标准。
食品安全标准的内容(一)食品相关产品中的致病性微生物、农药残留、兽药残留、重金属、污染物质以及其他危害人体健康物质的限量规定。
(二)食品添加剂的品种、使用范围、用量。
(三)专供婴幼儿的主辅食品的营养成分要求。
(四)对与食品安全、营养有关的标签、标识、说明书的要求。
(五)与食品安全有关的质量要求。
(六)食品检验方法与规程。
(七)其他需要制定为食品安全标准的内容。
(八)食品中所有的添加剂必须详细列出。
(九)食品生产经营过程的卫生要求。
标准实施后,国务院卫生行政部门和省、自治区、直辖市人民政府卫生行政部门应当会同同级农业行政、质量监督、工商行政管理、食品药品监督管理、商务、工业和信息化等部门,对食品安全国家标准和食品安全地方标准的执行情况分别进行跟踪评价,并应当根据评价结果适时组织修订食品安全标准。
国务院和省、自治区、直辖市人民政府的农业行政、质量监督、工商行政管理、食品药品监督管理、商务、工业和信息化等部门应当收集、汇总食品安全标准在执行过程中存在的问题,并及时向同级卫生行政部门通报。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Airy的菜地制作纸面文件时,每份文件不得超过十页;无法压缩在十页之内的,每份可装订成一册、两册、三依此类推。
请严格遵照执行,如下次再出现总经理撕不动的文件,将严厉追究其部门经理的责任…【转】“安全第一”的C语言编程规范 作者 airy 日期 2006-8-3 11:14:00作 者:清华大学 陈萌萌 邵贝贝编者按: C语言是开发嵌入式应用的主要工具,然而C语言并非是专门为嵌入式系统设计,相当多的嵌入式系统较一般计算机系统对软件安全性有更苛刻的要求。
1998 年,MISRA指出,一些在C看来可以接受,却存在安全隐患的地方有127处之多。
2004年,MISRA对C的限制增加到141条。
嵌入式系统应用工程师借用计算机专家创建的C语言,使嵌入式系统应用得以飞速发展,而MISRAC是嵌入式系统应用工程师对C语言嵌入式应用做出的贡献。
如今MISRA C已经被越来越多的企业接受,成为用于嵌入式系统的C语言标准,特别是对安全性要求极高的嵌入式系统,软件应符合MISRA标准。
从本期开始,本刊将分6期,与读者共同学习MISRAC。
第一讲:“‘安全第一’的C语言编程规范”,简述MISRAC的概况。
第二讲:“跨越数据类型的重重陷阱”,介绍规范的数据定义和操作方式,重点在隐式数据类型转换中的问题。
第三讲:“指针、结构体、联合体的安全规范”,解析如何安全而高效地应用指针、结构体和联合体。
第四讲:“防范表达式的失控”,剖析MISRAC中关于表达式、函数声明和定义等的不良使用习惯,最大限度地减小各类潜在错误。
第五讲:“准确的程序流控制”,表述C语言中控制表达式和程序流控制的规范做法。
第六讲:“构建安全的编译环境”,讲解与编译器相关的规范编写方式,避免来自编译器的隐患。
C/C++语言无疑是当今嵌入式开发中最为常见的语言。
早期的嵌入式程序大都是用汇编语言开发的,但人们很快就意识到汇编语言所带来的问题——难移植、难复用、难维护和可读性极差。
很多程序会因为当初开发人员的离开而必须重新编写,许多程序员甚至连他们自己几个月前写成的代码都看不懂。
C/C++语言恰恰可以解决这些问题。
作为一种相对“低级”的高级语言,C/C++语言能够让嵌入式程序员更自由地控制底层硬件,同时享受高级语言带来的便利。
对于C语言和 C++语言,很多的程序员会选择C语言,而避开庞大复杂的C++语言。
这是很容易理解的——C语言写成的代码量比C++语言的更小些,执行效率也更高。
对于程序员来说,能工作的代码并不等于“好”的代码。
“好”代码的指标很多,包括易读、易维护、易移植和可靠等。
其中,可靠性对嵌入式系统非常重要,尤其是在那些对安全性要求很高的系统中,如飞行器、汽车和工业控制中。
这些系统的特点是:只要工作稍有偏差,就有可能造成重大损失或者人员伤亡。
一个不容易出错的系统,除了要有很好的硬件设计(如电磁兼容性),还要有很健壮或者说“安全”的程序。
然而,很少有程序员知道什么样的程序是安全的程序。
很多程序只是表面上可以干活,还存在着大量的隐患。
当然,这其中也有C语言自身的Ab 技任 omCa首其硬人机Li 技日AR DS 产ne(ai PC GU 从的在嵌用【44原因。
因为C语言是一门难以掌握的语言,其灵活的编程方式和语法规则对于一个新手来说很可能会成为机关重重的陷阱。
同时,C语言的定义还并不完全,即使是国际通用的C语言标准,也还存在着很多未完全定义的地方。
要求所有的嵌入式程序员都成为C语言专家,避开所有可能带来危险的编程方式,是不现实的。
最好的方法是有一个针对安全性的C语言编程规范,告诉程序员该如何做。
1 MISRAC规范1994年,在英国成立了一个叫做汽车工业软件可靠性联合会(The Mo tor Industry Software Reliability Association,以下简称MISRA)的组织。
它是致力于协助汽车厂商开发安全可靠的软件的跨国协会,其成员包括:AB汽车电子、罗孚汽车、宾利汽车、福特汽车、捷豹汽车、路虎公司、Lotus公司、MIRA公司、Ricardo公司、TRW汽车电子、利兹大学和福特VISTEON汽车系统公司。
经过了四年的研究和准备,MISRA于1998年发布了一个针对汽车工业软件安全性的C语言编程规范——《汽车专用软件的C语言编程指南》(Gui delines for the Use of the C Language in Vehicle Based Softwar e),共有127条规则,称为MISRAC:1998。
C语言并不乏国际标准。
国际标准化组织(International Organizat ion of Standardization,简称ISO)的“标准C语言”经历了从C90、C96到C99的变动。
但是,嵌入式程序员很难将ISO标准当作编写安全代码的规范。
一是因为标准C语言并不是针对代码安全的,也并不是专门为嵌入式应用设计的;二是因为“标准C语言”太庞大了,很难操作。
MISRAC: 199 8规范的产生恰恰弥补了这方面的空白。
随着很多汽车厂商开始接受MISRAC编程规范,MISRAC:1998也成为汽车工业中最为著名的有关安全性的C语言规范。
2004年,MISRA 出版了该规范的新版本——MISRAC:2004。
在新版本中,还将面向的对象由汽车工业扩大到所有的高安全性要求(Critical)系统。
在 MISRAC:2004中,共有强制规则121条,推荐规则20条,并删除了15条旧规则。
任何符合MISRA C:2004编程规范的代码都应该严格的遵循121条强制规则的要求,并应该在条件允许的情况下尽可能符合20条推荐规则。
MISRAC:2004将其141条规则分为21个类别,每一条规则对应一条编程准则。
详细情况如表1所列。
表1MISRAC:2004规则分类最初,MISRAC:1998编程规范的建立是为了增强汽车工业软件的安全性。
可能造成汽车事故的原因有很多,如图1所示,设计和制造时埋下的适基硬又RTRe回回回回回程回作回Re签Li灰Lo Se St 用密登日详站加发日评留访隐患约占总数的15%,其中也包括软件的设计和制造。
MISRAC:1998就是为了减小这部分隐患而制定的。
MISRAC编程规范的推出迎合了很多汽车厂商的需要,因为一旦厂商在程序设计上出现了问题,用来补救的费用将相当可观。
1999年7月22日,通用汽车公司(General Motors)就曾经因为其软件设计上的一个问题,被迫召回350万辆已经出厂的汽车,损失之大可想而知。
MISRAC规范不仅在汽车工业开始普及,也同时影响到了嵌入式开发的其他方向。
嵌入式实时操作系统µC/OSII的2.52版本虽然已经于2000 年通过了美国航空管理局(FAA)的安全认证,但2003年作者就根据MISRAC:19 98规范又对源码做了相应的修改,如将if ((pevent->OSEventTbl[y] &= ~bitx) == 0) {/*… */}的写法,改写成pevent->OSEventTbl[y] &= ~bitx;if (pevent->OSEventTbl[y] == 0) {/*… */}发布了2.62的新版本,并宣称其源代码99%符合MISRAC:1998规范。
一个程序能够符合MISRAC编程规范,不仅需要程序员按照规范编程,编译器也需要对所编译的代码进行规则检查。
现在,很多编译器开发商都对 MISRAC规范有了支持,比如IAR的编译器就提供了对MISRAC:1998规范1 27条规则的检查功能。
2 MISRAC对安全性的理解MISRAC:2004的专家们大都来自于软件工业或者汽车工业的知名公司,规范的制定不仅仅像过去一样局限于汽车工业的C语言编程,同时还涵盖了其他高安全性系统。
图1汽车事故原因分布图MISRAC:2004认为C程序设计中存在的风险可能由5个方面造成:程序员的失误、程序员对语言的误解、程序员对编译器的误解、编译器的错误和运行出错(runtime errors)。
程序员的失误是司空见惯的。
程序员是人,难免会犯错误。
很多由程序员犯下的错误可以被编译器及时地纠正(如键入错误的变量名等),但也有很多会逃过编译器的检查。
相信任何一个程序员都曾经犯过将“= =”误写成“=”的错误,编译器可能不会认为if(x=y)是一个程序员的失误。
再举个例子,大家都知道++运算符。
假如有下面的指令:i=3;printf(“%d”,++i);输出应该是多少?如果是:printf(“%d”,i++);呢?如果改成-i++呢?i+++i呢?i+++++i呢?绝大多数程序员恐怕已经糊涂了。
在MISRAC:2004中,会明确指出++或--运算符不得和其他运算符混合使用。
C语言非常灵活,它给了程序员非常大的自由。
但事情有好有坏,自由越大,犯错误的机会也就越多。
如果说有些错误是程序员无心之失的话,那么因为程序员对C语言本身或是编译器特性的误解而造成的错误就是“明”知故犯了。
C语言有一些概念很难掌握,非常容易造成误解,如表达式的计算。
请看下面这条语句:if ( ishigh && (x == i++))很多程序员认为执行了这条指令后,i变量的值就会自动加1。
但真正的情况如何呢?MISRA中有一条规则:逻辑运算符&&或||的右操作数不得带有副作用(side effect)*,就是为了避免这种情况下可能出现的问题。
*所谓带有副作用,就是指执行某条语句时会改变运行环境,如执行x=i++之后,i的值会发生变化。
另外,不同编译器对同一语句的处理可能是不一样的。
例如整型变量的长度,不同编译器的规定就不同。
这就要求程序员不仅要清楚C语言本身的特性,还要了解所用的编译器,难度很大。
还有些错误是由编译器(或者说是编写编译器的程序员)本身造成的。
这些错误往往较难发现,有可能会一直存留在最后的程序中。
运行错误指的是那些在运行时出现的错误,如除数等于零、指针地址无效等问题。
运行错误在语法检查时一般无法发现,但一旦发生很可能导致系统崩溃。
例如:#define NULL 0……char* p;p=NULL;printf(“Location of 0 is %d\n”, *p);语法上没有任何问题,但在某些系统上却可能运行出错。
C语言可以产生非常紧凑、高效的代码,一个原因就是C语言提供的运行错误检查功能很少,虽然运行效率得以提高,但也降低了系统的安全性。
有句话说得好,“正确的观念重于一切”。
MISRAC规范对于嵌入式程序员来讲,一个很重要的意义就是提供给他们一些建议,让他们逐渐树立一些好的编程习惯和编程思路,慢慢摒弃那些可能存在风险的编程行为,编写出更为安全、健壮的代码。