高级篇附录二语言库_第1页
高级篇附录二语言库_第2页
高级篇附录二语言库_第3页
高级篇附录二语言库_第4页
高级篇附录二语言库_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

1、上章回顾数组和指针相同与不同通过指针数组和通过数组指针指针在什么时候可以加减运算函数指针的申明和调用函数数组和数组函数家园家园-开发板商城/上海附录二C语言标准库家园家园-开发板商城/上海预习检查NULL和NUL有什么差别字符串操作有哪几个常用函数memcpy和strcpy有什么差别家园家园-开发板商城/上海课程目标本章概述对标准C语言的补充,以及一些常用的特性。本章目标了解一些C语言特殊的宏定义掌握函数可变参数的应用重点理解NULL, offsetof, errno宏或函数掌握函数可变参数列表难点C语言库的日期函数操作难点函数的可变参数列表标准C的异常处理

2、机制家园家园-开发板商城/上海本章结构家园家园-开发板商城/上海标准库应用总结主要库文件C标准语言库概要和应用标准C语言函数标准语言库概述2.1 标准语言概述函数库简介C语言标准库的历史标准库函数优势环境和宿主环境家园家园-开发板商城/上海2.1.1 函数库简介标准c语言包括语言标准和一组标准库支持字符和字符串、输入与输出、数学函数、期与时间转换、动态分配和其他特性预处理器命令#include,例:下列程序段中头文件math.h使程序能够#include <mathh> double x,y;x = cos(y);这个库的头文件余弦函数cos。家

3、园家园-开发板商城/上海2.1.1 函数库简介对定义为函数的库功能,标准C语言正函数以外的同名函数式宏例:假设担心mathh中已有名为cos的宏,则可以用下面两种实现提供除真方法基础函数。两者都利用宏名后面不能紧跟一个开括号的特点,避免扩展同名函数或宏cos。#include<mathh>double a,b,(*p)(double);p = &cos;a= (*p)(b);a= (cos)(b);* calIs function cos,always * calls function cos,always *也可以取消所有涉及到的宏的定义:#include&l

4、t;mathh>#undef cosa = cos(b);* calls function cos,always *家园-开发板商城 /上海2.1.2 C语言标准库的历史C语言提供的标准函数库,函数库通过#include进行在C89标准中:<assert.h><locale.h><stddef.h><ctype.h><math.h><stdio.h><errno.h><float.h><limits.h><stdarg.h><time.h><

5、;setjmp.h> <signal.h><stdlib.h><string.h>在95年的修正版中<iso646.h> <wchar.h> <wctype.h>在C99中增加了六个函数库<complex.h><tgmath.h><fenv.h><inttypes.h><stdbool.h> <stdint.h>家园家园-开发板商城/上海2.1.3 标准库函数优势准确性高效性 可移植性家园家园-开发板商城/上海2.1.4环

6、境和宿主环境“(freestanding)”系统系统可以不要任何类型的文件系统,也可以基本上不要操作系统不要求它们提供除语言本身以外的任何东西宿主(hosted)”环境程序运行在RC机、大型机或者介于两者之间的计算机上家园家园-开发板商城/上海2.2 标准C语言函数标准C语言函数C兼容性家园家园-开发板商城/上海2.2.1标准C语言函数如何从标准c语言定义得到传统c语言库函数定义消除任何使用标准c语言类型的函数,如long long与_Complex,或消除标准c语言中新增的函数(C89或C99).删除限定符const、restrict与volatile符括号内使用的s

7、tatic.删除数组将类型void * 换成char * ,将size_t换成int。家园家园-开发板商城/上海2.2.1标准C语言函数库函数注意事项库名原则上是保留字。编程对象。不能定义与标准库名称同名的外部库头文件或文件名可以内置在实现中,但仍然要被包括之后才能访问其名称编程可以多次按任意顺序包括库头文件例 下面的方法可以保证库头文件不被包括多次:/* I Header BtddefH */#ifndef _STDDEF * Don.t try to redeclare * #define _STDDEF ltypedef int ptrdiff_t;/* 0ther defi

8、nitions */#endif家园-开发板商城 /上海2.2.2 C兼容性C+语言包括标准C语言运行库,但增加了几个C+特定库不能从c语言程序中调用c+函数,但c+提供了从C+中调用c语言函数的方法在C中,c语言函数时有两个要求要使用标准c语言原型,因为c+要求原型。函数外部c语言要显式地标为具有c语言连接,即在c+的上字符串“C”。类extern后面加家园家园-开发板商城/上海2.2.2 C兼容性c语言函数中调用另一C语言函数extern int f(void);c+中调用C语言函数extern“C“int f(void);c+中要一组c语言函数,则可以对所有c语言

9、函数采用连接规范:extern“C“double sqrt(double x); int f(void);家园家园-开发板商城/上海2.2.2 C兼容性从C语言或c+调用头文件library.h在头文件中包括extern “C”示这是个c+程序。(条件预编译cplusplus宏),表/* File library.h */ #ifdefcplusplusextern“c” #endif/* C declarations * #ifdefcplusplus用正常c语言用户用#endifinclude命令包装连接extern “C“ #include”library.h“嵌入家园-开发

10、板商城/上海2.3主要的库文件stdio.h stdlib.h string.h stdarg.h time.h setjmp.hsignal.hstddef.h math.h ctype.h erron.h stdbool.h iso645.hassert.h家园家园-开发板商城/上海2.3.1 Stddef.h语法概要之定义#include<stddefh>#define typedef typedef typedefNULLptrdiff_t; size_tj wchar_t;#define offsetof(type,member-designato

11、r)家园家园-开发板商城/上海2.3.1 Stddef.hNULLnull指针常量0转换为类型void的0ptrdiff_t实现定义的带符号整型是两个指针相减所得到的类型size_tsizeof运算符得到的无符号整型offsetof扩展一个整型常量表达式#define offsetof(type,memb)(size_t)&(type*)0)->memb)家园家园-开发板商城/上海2.3.1 Stddef.h例:对于sizeof(int)为4的字节寻址计算机#include<Stddefh>struct sint a; int b;x; siz

12、e_t size,offset; ptrdiff_t diff;Diff = x.b-&x.a;Size = sizeof(x.a); offset=offsetof(struct s,b);程序运行结果是:diff的值为1 size的值为4offset的值为4家园家园-开发板商城/上海2.3.2 math.h双精度浮点数的精度进行操作参数传递和错误处理如果传递过来的参数不在其定义域内,函数会返回一些不确定的值,并将变量errno置为EDOM。如果返回值太大,无法用一个double类型表示(造成上溢),这些函数会返回HUGEVAL,并将errno置为ERANGE。如果函数结

13、果太小,无法表示,则函数返回0,errno是否设置为ERANGE由实现确定EDOM,ERANGE和HUGEVAL都在mathh中定义。家园家园-开发板商城/上海2.3.3 ctype.h字符处理有两类函数:分类与转换分类函数的名称以is开头转换函数的名称以to开头宽字符进行运算的分类与转换函数分类函数isw转换函数tow家园家园-开发板商城/上海2.3.3 ctype.h字符处理有两类函数:分类与转换分类函数的名称以is开头转换函数的名称以to开头宽字符进行运算的分类与转换函数分类函数isw转换函数tow通用函数分类函数wcstrans与iswctrans转换函数 wc

14、trans与towctrans家园家园-开发板商城/上海2.3.3 ctype.h例:#inelude<ctypeh> #define TRUE1#define FALSE 0int is_id(const char *s)char ch;if (ch= *s+) =0)return FALSE; /*empty string*/if(!(isalpha(ch)|ch =_) return FALSE; while (ch = *s+)!=0)if(!(isalnum(ch) | ch=_) return FALSE;return TRUE;家园家园-开发板商城ub.c

15、om/上海2.3.4 erron.h语法概要#include<errno.h>extern int errno; or # define errno #define EDOM#define ERANGE#define ETLSEQ#include<stdio.h>void perror(const char *s)#include<stringh>char *strerror(int errnum)家园家园-开发板商城/上海2.3.4 erron.herrno保存库程序中实现定义的错误码,通常被定义为errno.h 中以E开头的宏在标准c语言中,

16、errno不能是变量,但可以扩展成int类型的任何可修改的lvalue的宏。errno用法例errno的常见用法是在调用库函数之前先清零,随后再进行检查:errno=0; x = sqrt(y); if(errno)printf(”?sqrt falled,codedn”,errno); x=0;家园家园-开发板商城/上海2.3.4 erron.hc语言实现通常定义一组标准错误码:EDOM参数不在数学函数能接受的域中。例如log函数的参数不能为负数参数ERANGE 数学函数的结果超出范围EILSEQ 翻译多字节字符序列时遇到的编码错误。这个错误最终会由mbrtowc或wcrtomb

17、发现,它们又被其他宽字符函数调用(c89增补l)函数strerror返回一个错误消息字符串的指针,其内容是由实现定义的,字符串不能修、但可以在后续调用strerror函数时覆盖函数perror在标准错误输出流中打印下面的序列:参数字符串s、冒号、空格、包errno中当前错误码的错误短消息和新行符家园家园-开发板商城/上海2.3.4 erron.hperror 使用例子:perror 函数代替printf函数#include<math.h> #include<errno.h> errno=0;x = sqrt(y); if(errno)perror(“sqrt

18、 failed”); x=0;sqrt failed:domain error家园家园-开发板商城/上海2.3.5 bool、false、true语法概要#include<stdboolh>#define #define #define #definebool false true_Bool /*无符号整数类型,只能保存数值0和1 */ 01 bool_true_false_are_define 1家园家园-开发板商城/上海2.3.6 iso646.h语法概要#include <iso646.h>#define and #define and_e

19、q #define bitand #define bitor #define compl #define not #define not_eq #define or #define or_eq #define xor #define xor_eq&& &= &|!=|=如果调用sqrt失败,则输出如下:sqrtomain e家园家园-开发板商城/上海2.3.7 assert.hAssert.h函数提供标准语法概要#include<asserth> #ifndef NDGBUGvoid assert(int expression); #el

20、se#define assert(x) (void)0) #endif作用标准输出流中打印一个诊断消息(参数文本、文件名(_FILE_)和号(_LINE_)调用abort函数或exit函数终止程序流扩展)家园家园-开发板商城/上海2.3.7 assert.h例:测试一个条件并可能使程序终止#include <assert.h> #include <stdio.h> #include <stdlib.h> struct ITEMint key; int value;void additem(struct ITEM *itemptr)assert(i

21、temptr != NULL);int main(void)additem(NULL); return 0;家园-开发板商城 /上海2.3.8 string.hC 常用字符串处理函数及使用示例char *strncat(char *s1, const char *s2, size_t n)将字符串s2中最多n个字符添加到字符串s1的后面。s2的第一个字符重定义s1 的null终止符。返回s1的值int strcmp(const char *s1, const char *s2)比较字符串s1和字符串s2。函数在s1等于、小于或大于s2时分别返回0、小于0 或大于0的值int str

22、ncmp(const char *s1, const char *s2, size_t n)比较字符串s1中的n个字符和字符串s2。函数在s1等于、小于或大于s2时分别返回0、小于0或大于0的值家园家园-开发板商城/上海2.3.8 string.hC 常用字符串处理函数及使用示例char *strcpy(char *s1, const char *s2)将字符串s2到字符串数组s1中,返回s1的值char *strncpy(char *s1, const char *s2, size_t n)将字符串s2中最多n个字符到字符串数组s1中,返回s1的值char *strcat(cha

23、r *s1, const char *s2)将字符串s2添加到字符串s1的后面。s2的第一个字符重定义s1的null终止符。返回s1的值家园家园-开发板商城/上海2.3.8 string.hC 常用内存处理函数void *memy(void *destin,void *source, char ch,unsigned n)了ch,则返回直接跟随ch的在destin中的字节的一个指针若Void * memcpy(void *destin,void *source,unsigned ,unsigned n)从source一个n字节的块到destin.如果源块和目标块重迭,则选择方向vo

24、id *memchr(void *s,char ch,unsigned n)返回在s中首先出现ch的一个指针;如果在s数组中不出现ch,就返回NULL.void *memcmp(void *s1,void *s2,unsigned n)比较正好是n字节长的两个字符串s1和s2.些函数按无符号字符比较字节家园家园-开发板商城/上海2.3.8 string.hC 常用内存处理函数int memicmp(void *s1,void *s2,unsigned n)比较s1和s2的前n个字节,不管字符大写或小写.void *memmove(void *destin,void *source,

25、unsigned n)从source字节到destinvoid *memcpy(void *destin,void *source,unsigned n)从source字节到destinvoid *memset(void *s,char ch,unsigned n)将s的所有字节置于字节ch中.s数组的长度由n给出.家园家园-开发板商城/上海2.3.9 stdarg.hStdarg.h头文件提供了可变参数表语法概要#include<stdarg.h>typedef va_list;va_start(va_list ap,type LastFixedParm) va_ar

26、g(va_list ap,type)#define #definevoid voidva_end(va_list ap); va_copy(va_list dest,va_list src);家园家园-开发板商城/上海2.3.9 stdarg.hstdargh中定义的宏、函数和类型的含义Va_list这种类型局部状态变量,用于遍历参数。Va_start这个宏初始化状态变量ap,要先调用之后才能调用.将ap中的内部指针设置成指向传入函数的第一个可变参数。Va_arg这个宏返回参数表中下一个参数的值,将内部参数指针(在ap中)移到下一个参数()。Va_end这个函数或宏在用va_arg

27、所有参数之后调用。Va_copy(C99)这个宏在dest中src的当前状态,在参数表中生成第二个指针。然后可以对src与dest采用va_arg。家园家园-开发板商城/上海2.3.9 stdarg.h编写可变个数参数的函数#include “printargsh”int arg_types =(INTARG,DBLARG,INTARG,DBLARG,0); int main()printargs(&ar9_types0,l,20,3,40); return 0;printargs的和整数类型指定符的值放在文件printargs.h中。/* file printargsh;

28、Standard C。*/ #include<stdargh>#define INTARG #define DBLARG1 /* codes used in argtypep*/ 2void printargs(int *argtypep,);家园家园-开发板商城/上海2.3.9 stdarg.h标准C语言中printargs的相应定义如下:#include<stdio.h> #include “printargs.h”void printargs( int*argtypep,) * Standard C *va_list intap; argtype;va

29、_start(ap,argtypep);while( argtype = *argtypep+) != 0)switch(argtype)caseARG:printf(”int:dn”,va_arg(ap,int); break;case DBLARG:printf(“double:fn“,va_arg(ap,double); break;*while* va_end(ap);上海/家园 开发板商城 2.3.10 setjmp.h语法概要#include<setjmph>typedef jmp_buf; int setjmp(Jmp_buf env);void long

30、Jmp(jmp_buf env,int status)setjmp与longjmp函数实现非本地跳转处理异常例外情形家园家园-开发板商城/上海2.3.10 setjmp.hjmp_buf数组类型Setjmpenv是个由实现定义的数组返回0Longjmpenv是个由实现定义的数组返回status家园家园-开发板商城/上海2.3.10 setjmp.h例#include<setjmp.h> Imp_buf ErrorEnv; int guard(void)/* Return 0 if successfult else longjmp code*/int stat

31、us = setjmp(ErrorEnv); if(status!=0) return status; /*error*/ process();return 0;int process(void)if(error_happened)longjmp(ErrorEnv,error_code);家园家园-开发板商城/上海2.3.11 signal.h语法概要#include <signal.h>#define SIG_IGN #define SIG_DFL #define SIG_ERR#define SIGxvoid(*signal(int sig,void(*func)(

32、int)(int);intraise(int sig);typedef sig_atomic_t;/* NonStandard extensionst */int int intkill(int pid,intsig);(*ssignal(int softsig,int(*func)(int)(int); gsignal(int softsig);void peignal(int sig,char* prefix);家园-开发板商城/上海2.3.11 signal.h运用特点信号是(潜在的)异步信号的触发可以通过计算机的错误探测机制、用户程序中的kill或raise函数以及程序外部

33、的操作用法:信号处理器是个用户函数void my_handler(int the_signal)SIG_IGN signal(sig,SIG_IGN) SIG_DFL signal(sig, SIG_DFL)raise或gsignal函数在当前进程中发出指定的信号(或软件信号)kill函数使特定进程中发出指定的信号家园家园-开发板商城/上海2.3.11 signal.h运用实例void new_handler(int sig) void(*old_handler)();/*Set new handler,saving old handler*/ old_handler = sign

34、al(sig, &new_handler); if(old_handler = SIG_ERR)fprintf(”stderr,”?Could.t establish new handlern”);/* store old handler*/ if(signal(sig,old_handler)=SIG_ERR)fprintf(“stderr,”?Could。t put back old handlern”);家园家园-开发板商城/上海2.3.11 signal.h信号处理注意事项如果信号是由raise或gsignal发出的,则这些函数返回其调用者。如果信号是由abort发

35、出的,则标准c语言程序终止。其他实现可能返回abort的调用者。如果处理的信号是SIGFPE或另一实现定义的计算信号,则返回时的行为是未定义的。家园家园-开发板商城/上海2.4 标准库应用总结编写参数数目可变的函数字符标准C的异常处理机制对内存进行操作的标准库函数C语言日期操作malloc()、calloc()、realloc()NULL和NUL的区别 非格式化输入输出函数家园家园-开发板商城/上海2.4.1编写参数数目可变的函数利用stdargh例:printf(" Hello,world! n" );/* no more arguments */

36、printf("%sn" , "Hello, world!");/*one more string argument*/printf("%s, %sn" , "Hello" , "world!"); /* two more string arguments*/printf("%s, %dn", "Hello", 42);/*one string, one int */家园家园-开发板商城/上海2.4.2 标准C的异常处理机制绝对终止条件结束 非

37、局部goto信号(Signals)公共变量家园家园-开发板商城/上海 绝对终止调用stdlib.habort: 粗鲁地结束程序exit:文明地结束程两者区别abort立即结束程序 ,不保存数据exit保存数据,执行客户用atexit的清除代码家园家园-开发板商城/上海 绝对终止例#include <stdio.h> #include <stdlib.h>static void atexit_handler_1(void)printf("within 'atexit_handler_1'n&qu

38、ot;);static void atexit_handler_2(void)printf("within 'atexit_handler_2'n");int main(void)atexit(atexit_handler_1); atexit(atexit_handler_2); exit(EXIT_SUCCESS);printf("this line should never appearn");结果within 'atexit_handler_2'within 'atexit_handler_1'并返

39、回码给调用环境.comreturn 0;/ 条件结束<assert.h> 中的assert#define assert(condition) LINE)printf函数调用abort终止程序_assert(condition), #condition,FILE,自定义assert函数例:void _assert(int test, char const *test_image, char const *file, int line)if (!test)printf("Assertion failed: %s, file %s, line

40、%dn", test_image, file, line); abort();家园-开发板商城/上海 非局部goto<setjmp.h > 中的setjmp与longjmp特点可以goto到任何地方在程序的任意它操作特点jmp_buf内容:程序位置指针、堆栈与框架指针,寄存器与内存值setjmp(j)设置goto指针setjmp可以标记相应的异常处理过程longjmp来终止异常longjmp(j, r)来goto到对象j指定的地方家园家园-开发板商城/上海 非局部goto操作实例int main(void)if (set

41、jmp(j) = 0)printf("'setjmp' is initializing 'j'n"); raise_exception();/恢复上下文printf("this line should never appearn");elseprintf("'setjmp' was just jumped inton");/* 异常处理过程*/return 0;#include <setjmp.h> #include <stdio.h> jmp_buf j;voi

42、d raise_exception(void)printf("exception raisedn"); longjmp(j, 1);/* jump到异常处理过程*/printf("this line should neverappearn");运行结果'setjmp' is initializing 'j' exception raisedsetjmp' was just jumped into家园家园-开发板商城/上海 信号(Signals)<signal.h > 中的rai

43、se与signalraise来信号,并进入到相应的处理过程signal两种安装指定处理方法:* signal(SIG* signal(SIG, SIG_DFL),/使用系统默认的处理方法., SIG_IGN), /告诉系统忽略信号。实例void handler(int signal_value); void f(void)signal(SIGFPE, handler); /*/* . */处理过程*/raise(SIGFPE); /* 通过'SIGFPE'来调用处理过程*/家园家园-开发板商城/上海2.4.3 对内存进行操作的标准库函数memmove() 与memc

44、py()内存copyMemmove 考虑到相互覆盖memcpy 速度比 memmove 快例: 将buf从"RIGHT"改为“RIGRIGHT”static char buf ='R','I','G','H','T','0','-','-','-'Int main()int i;for (i = 0; i<6; +i)bufi + 3 = bufi;家园-开发板商城/上海2.4.4 对内存进行操作的标准库函数mem

45、cmp() 与strncmp()memcmp遇到NULL字符时结束memcmp()函数不能用来比较结构的值例: 结构体比较struct fooshort s; long l;分析(32位系统环境)struct foo byte0 struct foo byte1 struct foo byte2 struct foo byte3 struct foo byte4 struct foo byte5s的低位字节s的字节无用信息(使l从一个long类型边界开始) 无用信息(使l从一个long类型边界开始) l的最低位字节l的次低位字节struct fo家l的园次字em节bedclub.costruc

46、t foo1的最字节上海家园 开发板商城2.4.4 对内存进行操作的标准库函数strcpy() () 与memcpy ()strcpy()函数只能拷贝字符串,遇到NULL字符时结束memcpy()函数可以拷贝任意类型的数据,指定字节数使用规则拷贝字符串时,通常都使用strcpy()函数在拷贝其它数据时,通常都使用memcpy()函数。家园家园-开发板商城/上海2.4.4 对内存进行操作的标准库函数例#include <stdio. h> #include <string. h>typedef struct cust_strint id ;char last_

47、name 20 ; char first_namel5; CUSTREC;家园家园-开发板商城/上海2.4.4 对内存进行操作的标准库函数例void main (void)char * src_string = "This is the source string" ; char dest_string50;CUSTREC src_cust; CUSTREC dest_cust;printf("Hello! I'm going to copy src_string into dest_string!n"); printf("

48、Done! dest_string is: %sn" , strcpy(dest_string, src_string) ; printf("Encore! Let's copy one CUSTREC to another. n") ;prinft("I'll copy src_cust into dest_cust. n");/ * First, intialize the src_cust data members. * / src_cust. id = 1 ;strcpy(src_cust. last_name, &qu

49、ot;Strahan"); strcpy(src_cust. first_name, "Troy"); memcpy(&dest_cust, &src_cust, sizeof(CUSTREC);printf("Done! I just copied customer number # %d (%s %s). " , dest_cust. id, dest_cust. first_name, dest_cust. last_name) ;上海家园 开发板商城 日期概述Coordinated Universal Ti

50、me(UTC)世界标准时间Calendar Time:日历时间epoch:时间点clock tick:时钟计时单元家园家园-开发板商城/上海 计时C中的计时函数是clock()lock_t clock( void )#define CLOCKS_PER_SEC (clock_t)1000)家园家园-开发板商城/上海 计时实例:运行一个循环或者处理其它到底花了多少时间#i nclude “stdio.h” #i nclude “stdlib.h” #i nclude “time.h” int main( void )longi = 100000

51、00L;clock_t start, finish;doubleduration;/* 测量一个持续的时间*/printf( "Time to do %ld empty loops is ", i ); start = clock();while( i- -); finish = clock();duration = (double)(finish - start) / CLOCKS_PER_SEC; printf( "%f secondsn", duration );system("pause");家园-开发板商城 /上

52、海 计时实例:获得日历时间time_t time(time_t * timer);代码分析#include "time.h" #include "stdio.h" int main(void)struct tm *ptr; time_t lt;结果:The Calendar Time now is 1122707619即从1970年1月1日0时0分0秒到此时的秒数。lt =tiLL);printf("The Calendar Time now is %dn",lt); return 0;家园家园-开发板商城/

53、上海 计时实例:获得日期和时间struct tm * gmtime(const time_t *timer);获得的世界标准时间是2005年7月30日7点18分20秒struct tm * localtime(const time_t * timer);获得的本地时间会比时间标准时间晚8个小时代码分析#include "time.h" #include "stdio.h" int main(void)struct tm *local; time_t t;结果:Local hour is: 15 UTC hour is: 7t=tiLL);local=localt

温馨提示

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

评论

0/150

提交评论