C语言准则细则(第二版)_第1页
C语言准则细则(第二版)_第2页
C语言准则细则(第二版)_第3页
C语言准则细则(第二版)_第4页
C语言准则细则(第二版)_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录1 背景说明12 背景说明13 参考资料14 准则细则1准则1:对基本类型声明和使用。(推荐)1准则2:过程名禁止被重用。(强制)2准则3:标号名禁止被重用。(强制)2准则4:一个文件中的程序总行一般不得超过2000行。(参考)3准则5:一个过程(函数、子程序)中的程序总行一般不得超过200行。(参考)3准则6:严格审查条件判别的then分支中无任何执行语句的情况。(强制)3准则7:严禁将过程声明为指针类型。(强制)3准则8:禁止直接从过程中跳出。(强制)4准则9:严格审查条件判别的else分支中无任何执行语句的情况。(强制)4准则10:禁止在非赋值表达式中出现了赋值操作符。(强制)5准

2、则11:过程体必须用大括号括起来。(强制)6准则12:循环体必须用大括号括起来。(强制)6准则13:thenelse中的语句必须用大括号括起来。(强制)6准则14:尽量避免使用goto语句。(强制)7准则15:尽量避免将过程定义为参数。(推荐)7准则16:禁止在结构体定义中含有空域。(强制)8准则17:禁止声明多重标号。(强制)8准则18:过程中避免使用过多的参数,最多不要超过20个。(参考)8准则19:尽量避免过程参数在过程调用中未被使用。(推荐)9准则20:参数必须使用类型声明。(强制)9准则21:实参与形参个数必须一致。(强制)9准则22:禁止使用一些模糊的语句。(强制)10准则23:禁

3、止某个过程在其所在的文件中没被任何调用。(强制)10准则24:尽量避免使用不加以分析的注释。(推荐)11准则25:禁止switch语句的case中无语句。(强制)11准则26:使用无限循环必须严格审查。(强制)12准则27:禁止返回类型说明为void的过程中有retum语句返回值。(强制)12准则28:尽量避免使用“+=”或“-=”操作符。(推荐)12准则29:使用“+”或“一”操作符必须格外小心。(推荐)13准则30:禁止在循环中使用break语句。(强制)13准则31:尽量避免使用continue语句。(强制)14准则32:尽量避免使用三重的表达式。14准则33:在过程声明中必须对参数说明

4、。(强制)15准则34:返回类型为static的过程在其所在文件中必须被调用。(强制)15准则35:函数必须有返回语句。(强制)16准则36:禁止过程参数只有类型没有标识符。(强制)16准则37:禁止使用不合适的循环变量类型。(强制)17准则38:循环变量必须是局部声明的。(强制)17准则39:禁止在过程参数表中使用省略号。(强制)18准则40:禁止在结构体定义中使用位域。(强制)18准则41:尽量避免使用setimplongjmp。(推荐)19准则42:禁止使用禁用的过程,函数,文件或名称。(强制)19准则43:禁止重新定义使用C关键字。(强制)19准则44:禁止在禁止使用extern的文件

5、中使用了extem。(强制)20准则45:数组使用必须保证不会出现越界。(强制)20准则46:在switch语句中必须有defult语句。(强制)20准则47:逻辑表达式的连接必须使用大括号。(强制)21准则48:禁止对有符号类型进行移位运算。(强制)21准则49:对变量进行移位运算必须保证不会产生溢出。(强制)22准则50:禁止给无符号变量赋负值。(强制)22准则51:尽量避免使用逗号操作符。(推荐)23准则52:谨防长度操作符sizeof的副作用。(强制)23准则53:禁止同一个表达式中调用多个的函数。(强制)23准则54:禁止对实数类型的量做是否相等的比较。(强制)24准则55:尽量避免

6、使用不起作用的语句。(推荐)24准则56:尽量避免使用空语句。(推荐)25准则57:在if语句中应有else分支。(推荐)25准则58:禁止switch语句中为空。(强制)26准则59:禁止switch语句中只包含default语句。(强制)26准则60:禁止switch语句中的case语句没有由break终止的。(强制)26准则61:禁止procedurefunction(过程函数)中参数表为空。(强制)27准则62:禁止返回类型说明为Void的过程用在表达式中。(强制)27准则63:禁止void类型的变量作为参数进行传递。(强制)28准则64:禁止函数中只有一个return空语句而没有返回

7、值。(强制)28准则65:尽量避免在一个块中使用#define。(推荐)29准则66:禁止使用#undef。(强制)29准则67:谨慎使用#pragma。(推荐)30准则68:谨慎使用指针的逻辑比较。(推荐)30准则69:禁止参数指针赋值给过程指针。(强制)30准则70:有符号类型的位长度必须大于等于两位。(强制)31准则71:位的定义必须是有符号整数或无符号整数。(强制)31准则72:谨慎使用联合(union)的声明。(推荐)31准则73:禁止在头文件前有可执行代码。(强制)32准则74:禁止在宏中使用了多个#或#。(强制)32准则75:禁止定义不象函数的宏。(强制)32准则76:宏参数必须

8、用括号括起来。(强制)33准则77:禁止在宏中包含不允许的项。(强制)33准则78:指针的指针不能超过两级。(强制)33准则79:禁止三字母词的使用。(强制)34准则80:逻辑表达式应采用显式的表达。(推荐)34准则81:谨慎使用八进制数。(推荐)34准则82:谨慎使用寄存器变量。(推荐)35准则83:枚举元素的初始化必须完整。(强制)35准则84:禁止重新定义保留字。(强制)35准则85:谨慎对指针进行代数运算。(推荐)36例如86:当嵌入汇编程序时,嵌入过程必须是纯汇编程序。(强制)36准则87:字符类型必须标明是有符号还是无符号。(强制)37准则88:禁止对一个名字重新定义。(强制)37

9、准则89:禁止重复使用同一个名字。(强制)37准则90:禁止给变量赋的值与变量的类型不一致。(强制)38准则91:禁止对指针变量使用强制类型转换。(强制)38准则92:谨慎将其它类型变量强制转换为指针类型。(推荐)39准则93:谨慎使用混合运算方式。(推荐)39准则94:尽量避免使用不必要的类型转换。(推荐)39准则95:禁止实参和形参类型不一致。(强制)40准则96:尽量不要以非调用方式使用函数。(推荐)40准则97:头文件名不能使用“”、“”和“/”等字符。(强制)41准则98:函数返回类型必须一致。(强制)41准则99:函数和原型返回类型必须一致。(强制)41准则100:函数和原型参数类

10、型必须一致。(强制)42准则101:结构体变量初始化的类型必须一致。(强制)42准则102:结构体变量初始化的嵌套结构必须一致。(强制)43准则103:变量使用前必须被赋值过。(强制)43准则104:注意三重表达式中的类型匹配。(推荐)43准则105:赋值类型必须匹配。(强制)43准则106:数组下标必须是整型。(强制)44准则107:尽量不使用单行注释“/”。(推荐)44准则108:用typedef自定义的类型名禁止被重新定义。(强制)44准则109:谨慎在源程序中使用非;隹则字符。(推荐)45准则110:禁止表达式不是逻辑表达式。(强制)45准则111 禁止不要使用不正确的终止字符串。(强

11、制)46准则112:禁止局部变量与全局变量同名。(强制)46准则113:禁止对常数值做逻辑非的运算。(强制)46准则114:main函数必须为int(void)或int(int,char*)。(强制)47准则115:禁止使用嵌套的注译。(强制)47准则116:禁止对有符号类型使用位运算。(强制)48准则117:switch语句中的表达式禁止是逻辑表达式。(强制)48准则118:谨慎使用abort,exit等函数。(推荐)49准则119:禁止枚举类型的越现使用。(强制)49准则120:变量的使用禁止超出所定义的范围(强制)49准则121:谨慎在宏中使用“#”或“#”。(推荐)49准则122:禁止

12、在同一个文件中有#if而没有#endif。(强制)50准则123:禁止数组没有边界限定。(强制)50准则124:禁止参数与全局变量同名。(强制)50准则125:禁止参数与类型或标识符同名。(强制)51准则126:禁止在#include<.>中使用绝对路径名。(强制)51准则127:禁止在内部块中重新使用某名字。(强制)51准则128:禁止在逻辑表达式中使用赋值操作符。(强制)52准则129:禁止赋值操作符与“&&”或“|”连用。(强制)52准则130:禁止在复杂的表达式中使用volatile类型的变量。(强制)53准则131:避免使用老的参数表定义形式。(推荐)53

13、准则132:禁止位操作符带有布尔型的操作数。(强制)54准则133:禁止位操作符作用干布尔值。(强制)54准则134:禁止在结构体中使用无名位域。(强制)54准则135:避免由于设计的原因导致某些代码不能执行。(推荐)55准则136:避免无法控制的循环条件。(推荐)55准则137:禁止结构体声明不完整。(强制)56准则138:禁止参数的声明形式上不一致。(强制)56准则139:禁止变量在定义前被使用。(强制)56准则140:字符串数组的赋值必须再所分配的空间之内。(强制)57准则141:枚举类型的变量的成员必须初始化为整型。(强制)57准则142:禁止将枚举类型变量用作算术操作的操作数。(强制

14、)57准则143:避免对无符号数进行大于等于零或小于零的比较。(推荐)58准则144:避免声明了标号但不使用的情况。(推荐)58准则145:避免当switch语句的表达式是枚举类型时缺少case分支。(推荐)58准则146:禁止移位操作符中的右操作数为负数。(强制)59准则147:禁止sizeof操作符的操作数是类型。(强制)59准则148:禁止sizeof的参数是数组类型的函数参数。(强制)59准则149:禁止声明为数组的形式参数有固定的大小。(强制)60准则150:禁止声明的函数参数类型不完整。(强制)60准则151:禁止&&、|或!操作符的操作数不是布尔型。(强制)60准

15、则152:禁止两个布尔型变量进行比较。(强制)61准则153:禁止函数、变量或常量使用不同的类型重定义。(强制)61准则154:禁止引用空指针。(强制)62准则155:禁止在存储空间释放后再使用该存储空间。(强制)62准则156:分配存储空间在返回或退出活动范围时必须释放。(强制)63准则157:禁止引用堆栈,即当函数返回时一个外部变量指向堆栈区。(强制)63准则158:禁止修改或释放字符串常量。(强制)63准则159:禁止声明了函数、变量或常量等,但是在程序中未被使用的情况。(推荐)64准则160:数组的初始化必须完整。(强制)64准则161:禁止声明了类型但未使用的情况。(推荐)64准则1

16、62:禁止对同一函数作多次定义。(强制)65准则163:禁止对同一函数作多次声明。(强制)65准则164:禁止在函数体内使用外部声明。(强制)65准则165:禁止局部变量与全局变量重名。(强制)66准则166:禁止函数、变量或常量声明了但未定义的情况。(强制)66附录A与MISRA 和 LDRA标准的对应关系67附录B准则分类索引72721 背景说明依据第一版的试用情况,第二版修改了若干条准则,包括删除了4条准则,并进行了替换,新补充了28条准则(准则139准则166)。2 背景说明 1998年,国际发动机工业软件可靠性协会MISRA(Motor Industry Software Relia

17、bilityAssociation)组织制定了“汽车软件C语言使用指南”的标准。这份标准的产生庄自动化行业极大地推动了使用“安全的C”进行编程。这份标准在汽车行业被广泛接受,同时它也被其它行业所广泛借鉴。 利物浦数据研究协会LDRA (Liverpool Data research Associaes)作为专业软件测试协会建立于1975年。LDRA Testbed软件测试工具可基于MISRA的C语言使用标准对C语言程序进行检查,以帮助用户们在程序代码上加强行业际准的执行。 本标准是在MISRA和LDRA的标准基础上,结合我国军工软件开发实际情况,进行适当裁剪和修订而形成的。本标准的准则分为推荐

18、和强制两种类型,所有准则都经过了ViSUal C+的编译实验,对Visual C+编译器能识别的准则部进行了注释说明。3 参考资料 1 Guidelines For The Use Of The C Language In Vehicle Based Software,MISRA, 1998. 2 LDRA Testbed and MISRA C Checking,2000 LDRA Ltd, Version 2.0. 4 准则细则准则1:对基本类型声明和使用。(推荐) 在不同的编译程序中基本类型的长度是大不相同的,因此鼓励在统一的一个变量声明头文件中使用typedef定义软件使用的变量类型,

19、而在除此之外的程序中禁止使用基本类型的声明。这条准则是为了使代码易于移植。例如,在头文件c_standardsh中定义:typedef unsigned int UINT_32;typedf int SINT_32;typedef unsigned short.typedef unsigned char UCHAR;typedef float FLOAT_32;typedef double FLOAT_64;在程序中的使用如下:#include “c_standards.h”void p (void) UINT_32 i = ou; FLOAT_32 x = 0.0f; 准则2:过程名禁止被重

20、用。(强制)一个过程名禁止波重用于其它之处。例如:# include “c_standards.h”void foo (UINT_32 P_1) UINT_32 x = p_l;/*准则2:过程名静止被重用。*void static_p (void) UINT_32 foo = lu;准则3:标号名禁止被重用。(强制)一个标号名禁止被重用并且掩盖了这个标号名的含义。出现这种情况时,编译是否通过是依赖于编译程序的不同而不同的。例如:# include “c_standarda.h”/* 准则3:标号名禁止被重用。*/void static_p (void) UINT_32 value_x = l

21、u; UINT_32 y = ou ; /*/准则4:一个文件中的程序总行一般不得超过2000行。(参考)这个准则使管理者可以控制每个文件中的代码总数。准则5:一个过程(函数、子程序)中的程序总行一般不得超过200行。(参考)准则使管理者可以控制过程的大小,且便于单元测试。准则6:严格审查条件判别的then分支中无任何执行语句的情况。(强制) then分支中无任何执行语句,可能是由于遗漏掉了或是有意避免布尔表达式不成立时的情况。可以总结为下面几种形式: a if () else b if () ; elsec. if (. . . ) ; else # include “c_standards

22、.h”/* 准则6: 条件判别的then分支中无任何执行语句的情况。*/void static_p (void) UINT_32 valie_x = lu; /* */ if (value_x = =ou) # if FALSE value_x = value_x + lu;# endif /* */ if (value_x = = ou) ;注:Visual C+编译器,对“if ():”情况编译报警。准则7:严禁将过程声明为指针类型。(强制)使用过程指针是很危险的,必须严格控制。例如: # include “c_standards.h”void foo (UINT_32 P_1, UINT

23、_16 P_2)/* */ * 准则7: 严禁将过程声明为指针类型.*void static_p (void) void (*proc_pointer) (UINT_32, UINT_16 ) = foo; porc_pointer (lu, 1) ; /* */准则8:禁止直接从过程中跳出。(强制)这种情况的出现是依赖于编译程序的,但一般是由于使用了setjmp。例如: # include <setjmp.h># include “c_standars.h”/* 准则8: 禁止直接从过程中跳出.*/static void static_p (jmp_buf mark, UINT_

24、32 val) lomgjmp (mark, val) ;准则9:严格审查条件判别的else分支中无任何执行语句的情况。(强制) else 中无语句是由于代码不完整或是由于为了表明else中的那种可能性已经考虑到了,可以总结为下面几种形式: a. else ; b. else c. else ;例如:# include “c_standards.h”/* 准则9: 条件判别的else分支中无任何执行语句的情况.*/void static_p (coid) UINR_32 name_x = lu; /* *? If (name_x = = ou) /* */ else; /* */ if (na

25、me_x = = ou) /* */ else # if FALSE name_x = name_x + lu;#endif /* */ if (name_x = = ou) /* */ else ;准则10:禁止在非赋值表达式中出现了赋值操作符。(强制) 在非赋值表达式中出观了赋值操作符可能是由于把等于号“= =”误写为“=”,这会引起无法预科的后果,例如:#inclue “c_standards.h”/* 准则10:禁止在非赋值表达式中出现了赋值操作符。*/void static_p (void) UINT_32 Z = ou, x = ou; Bool f;ag = true; /* *

26、/ If (flag = false) Z = x lu; /* */准则11:过程体必须用大括号括起来。(强制) 受约束的语句使用大括号是出于维护的目的。准则12:循环体必须用大括号括起来。(强制) 受约束的语句使用大括号是出于维护的目的。 例如:#include “ c_standards.h”/* 准则12:循环体必须用大括号括起来。*/SINT_32 static_p (SLNT_32 p _ 1) SINT_ 32 J = 10 ; SINT_32 k = 0 ; /* */ for (k = 0 ; k < 10; k = k + 1 ) j -; return j ;准则1

27、3:thenelse中的语句必须用大括号括起来。(强制)受约束的语句使用大括号是出于维护的目的。例如:# include “c_standards.h”/* 准则13:then/else 中的语句必须用大括号括起来。*/SINT_32 static_p (SINT_32 p_1, SINT_32 P_2) SINT_32 J = 1; SINT_32 J = 2; /* */ if (p_1 > 0) I = I 1 ; else I = I + 1;If (p_1 > 0) J = j + p_2; else if (p_2 < 0) j = j p_2; else j =

28、 I; return I;准则14:尽量避免使用goto语句。(强制)使用goto语句被认为是不好的编程习惯。例如:#include “c_standards.h”/ * 准则14:尽量避免使用goto语句。*/void static_p(void)SINT_32 jump_flag = 0;/* */ start; jump_flag+; if (jump_flag < 10) goto start;准则15:尽量避免将过程定义为参数。(推荐) 将过程定义为参数可以用来生成代码。也会使控制流变得不清楚, 例如:# include “c_standards.h”void test_p(S

29、INT_32 p_1)/* */ * 准则15:尽量避免将过程定义为参数*/void static_p(void (*p_proc_pointer) (SINT_32 parameter_1)p_proc_pointer = test_p; 准则16:禁止在结构体定义中含有空域。(强制) 通常出现在类似于如下的情况中: struct atag struct anothertag ;例如:#include “c_standards.h”/ * 准则16:禁止在结构体定义中含有空域。*/struct s_p UINT_32 xs; struct UCHAR ac, ab:;:void static

30、_p(void)struct s_p sb:sb.xs = 1;/ * */准则17:禁止声明多重标号。(强制)使用多重标号是多余的,只需要一个。例如:#include “c_standards.h”/ * 准则17:禁止声明多重标号*/static void static_p(void)start; begin; / * */注:Visual C+ 编译器,多余的标号编译报错。准则18:过程中避免使用过多的参数,最多不要超过20个。(参考) 全局变量的使用与参数的使用之间的协定是一个复杂的问题,实参与形象传递数据要浪费时间,使用全局变量会更快一些,但使用全局变量会带来许多副作用。参数也可以定

31、义在结构体中,这样可以使过程看起来变得简洁。 例如:# include “c_standards.h”/ * 准则18:过程中避免使用过多的参数,最多不超过10个。*/void static_p (UINT_32 p_1, UINT_32 p_2, UINT_32 p_3, UINT_32 P_4, UINT_32 P_5, UINT_32 p_6, UINT_32 p_7, UINT_32 p_8, UINT_32 p_9, UINT_32 p_10, UINT_32 p_11, UINT_32 p_12, UINT_32 P_13, UINT_32 p_14, UINT_32 p_15 /

32、 * */准则19:尽量避免过程参数在过程调用中未被使用。(推荐)准则20:参数必须使用类型声明。(强制)一些编译程序允许缺省参数类型。例如:# include “c_standards.h”/ * 准则20:参数必须使用类型声明。*/UINT_32 static_p (p_1) UINT_32 result; /* */ result = p_1 * 2; result result ;注:Visuai C+ 编译器,编译报错。准则21:实参与形参个数必须一致。(强制)一些编译连接忽略实参与形参的个数检查。例如:# include “c_standards.h”UINT_32 test_p

33、(UINT_32 p_1, UINT_16 p-2) UINT_32 result = ou ; / * * result = p_1 + p_2;/ * 准则21:实参与形参个数必须一致。*/void static_p(UINT_32 P_1, uint_16 p_2) test_p (lu, 2, 3)注:Visual C+编译器 编译报错。 准则22:禁止使用一些模糊的语句。(强制)有一些模糊的操作符如:“=-”和“=+”。赋值表达式“I = -1”是不同的,很容易混淆。例如:# include “c_standards.h”/ * 准则22:禁止使用一些模糊的语句。*/void sta

34、tic_p (void)SINT_32 b = 1, a = 0;/ * */a =-b; a =+ b;准则23:禁止某个过程在其所在的文件中没被任何调用。(强制)一个文件中有主过程和其它过程,某个过程没被该文件中的其它任何过程调用。如果这个文件是系统的一部分,那么这个过程有可能被其它文件所调用,我们可以把这个过程移到调用它的那个文件中去。例如:#include “c_standards.h”/ * 准则23:禁止某个过程在其所在的文件中没被任何调用。*/UINT_32 static_p(UINT_32 p ) UINT_32 x = lu; /* * / x = x + p ; retur

35、n x :SINT_32 main (void) / * * / return (o) ;准则24:尽量避免使用不加以分析的注释。(推荐)注释应为功能性的,而非指令的逐句说明,对于源文件中的代码应该给予分析性的注释,例如:# include “c_standards.h”/ * 准则24:尽量避免使用不加以分析的注释。*/void static_p(void) UINT_32 x = ou ; / * * / x = lu; / * Let x to be I */ x + x + lu; / * x becomes x add I * /准则25:禁止switch语句的case中无语句。(强

36、制)这些case与它后面的case共用一组执行语句。也应该检查一下这些case语句后是否漏掉了break语句。例如:#include “c_standards.h”/ * 准则25:禁止switch语句的case中无语句。*/SINT_32 static_p (SINT_32 p_1)SINT_32 I = 0, J = 0;/ * * /SWITCH (P_1)case 0 : j = 0; break; case 1 ; case 2 ; j = I; break ; default; I = j + 1 ;return I + j ;准则26:使用无限循环必须严格审查。(强制)下面是几种

37、可以引起无限循环的简单情况:for(; ;)while(1) dowhile(1)准则27:禁止返回类型说明为void的过程中有retum语句返回值。(强制)如果过程返回类型为void,那么任何return语句不能有返回值。 例如:# include “c_standards.h”/ * 准则27:禁止返回类型说明为void的过程中有return 语句返回值。*/viod static_p(UINT_32 P_1, uint_32 p_2) UINT_32 result;/ * * / result = p-1 + p_2; return result;注:Visual C十十编译器,编译报错

38、。准则28:尽量避免使用“+=”或“-=”操作符。(推荐)许多专家相信使用这种结构是很危险的。例如:#include “c_standards.h”/ * 准则28:尽量避免使用“+=”或“-=”操作符。*/void static_p(void) UINT_32 x = lu ; UINT_32 y = 2u; UINT_32 Z = 3u ; boot flag = false ; / * * / x += 1 ; z += y ;准则29:使用“+”或“- -”操作符必须格外小心。(推荐)在表达式中使用这些操作符是很危险的。操作符在变量前的使用称之为前缀使用,操作符在变量后的使用称之为后缀

39、使用,这一准则允许在一个单独的表达式或循环控制中使用它们。这个准则应与准则120联系起来考虑,准则120中限定不可以使用它们作为前缓。用户可以选择其中一个作为准则.例如:#include “c_standards.h”void foo (UINT_32 p_x)/ * * / * 准则29:使用“+”或“-”操作符必须格外小心。*/void static_p (void)UINT_32 x = lu;UINT_32 y = 2u;Bool flag = false;/ * * /if (flag = false) x+;x = x + y+;foo(x+);准则30:禁止在循环中使用break

40、语句。(强制) 在循环中使用break语句使得循环有多于一个出口。 例如:#include “c_standrds.h”/* 准则30:禁止在循环中使用break语句。*/ void static_p(void) SINT_32 I = 10 ; / * * / while (I >-1) if (I = = 0) bresk;I = I 1:准则31:尽量避免使用continue语句。(强制) 使用continue语句不符合结构化程序设计原则。 例如:#include “c_standards.h”/ * 准则31:尽量避免使用continue语句。*/void static_p(SI

41、NT_32 P_1) SINT_32 I = p_1; SINT_32 x = o; / * * / while (I != 0) I - -; If(x = = 0) Continue ; 准则32:尽量避免使用三重的表达式。 使用三重的表达式会使代码变得高度复杂,可读性差。 例如:#include “c_standards.h”void foo (UINT_32 p_1) / * * / * 准则32:尽量避免使用三重的表达方式*/void static_p(UINT_32 P_1) static UINT_32 typeo = ou; static UINT_32 typel = iu; / * * / (p_1 = = 0) ? foo(typ0) ; foo (typel);准则33:在过程声明

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论