高級篇附錄二語言庫_第1頁
高級篇附錄二語言庫_第2頁
高級篇附錄二語言庫_第3頁
高級篇附錄二語言庫_第4頁
高級篇附錄二語言庫_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、上章回顧數組和指針相同與不同通過指針數組和通過數組指針指針在什么時候可以加減運算函數指針的申明和調用函數數組和數組函數家園家園-開發(fā)板商城/上海附錄二C語言標準庫家園家園-開發(fā)板商城/上海預習檢查NULL和NUL有什么差別字符串操作有哪幾個常用函數memcpy和strcpy有什么差別家園家園-開發(fā)板商城/上海課程目標本章概述對標準C語言的補充,以及一些常用的特性。本章目標了解一些C語言特殊的宏定義掌握函數可變參數的應用重點理解NULL, offsetof, errno宏或函數掌握函數可變參數列表難點C語言庫的日期函數操作難點函數的可變參數列表標準C的異常處理

2、機制家園家園-開發(fā)板商城/上海本章結構家園家園-開發(fā)板商城/上海標準庫應用總結主要庫文件C標準語言庫概要和應用標準C語言函數標準語言庫概述2.1 標準語言概述函數庫簡介C語言標準庫的歷史標準庫函數優(yōu)勢環(huán)境和宿主環(huán)境家園家園-開發(fā)板商城/上海2.1.1 函數庫簡介標準c語言包括語言標準和一組標準庫支持字符和字符串、輸入與輸出、數學函數、期與時間轉換、動態(tài)分配和其他特性預處理器命令#include,例:下列程序段中頭文件math.h使程序能夠#include <mathh> double x,y;x = cos(y);這個庫的頭文件余弦函數cos。家

3、園家園-開發(fā)板商城/上海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 *家園-開發(fā)板商城 /上海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>家園家園-開發(fā)板商城/上海2.1.3 標準庫函數優(yōu)勢準確性高效性 可移植性家園家園-開發(fā)板商城/上海2.1.4環(huán)

6、境和宿主環(huán)境“(freestanding)”系統(tǒng)系統(tǒng)可以不要任何類型的文件系統(tǒng),也可以基本上不要操作系統(tǒng)不要求它們提供除語言本身以外的任何東西宿主(hosted)”環(huán)境程序運行在RC機、大型機或者介于兩者之間的計算機上家園家園-開發(fā)板商城/上海2.2 標準C語言函數標準C語言函數C兼容性家園家園-開發(fā)板商城/上海2.2.1標準C語言函數如何從標準c語言定義得到傳統(tǒng)c語言庫函數定義消除任何使用標準c語言類型的函數,如long long與_Complex,或消除標準c語言中新增的函數(C89或C99).刪除限定符const、restrict與volatile符括號內使用的s

7、tatic.刪除數組將類型void * 換成char * ,將size_t換成int。家園家園-開發(fā)板商城/上海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家園-開發(fā)板商城 /上海2.2.2 C兼容性C+語言包括標準C語言運行庫,但增加了幾個C+特定庫不能從c語言程序中調用c+函數,但c+提供了從C+中調用c語言函數的方法在C中,c語言函數時有兩個要求要使用標準c語言原型,因為c+要求原型。函數外部c語言要顯式地標為具有c語言連接,即在c+的上字符串“C”。類extern后面加家園家園-開發(fā)板商城/上海2.2.2 C兼容性c語言函數中調用另一C語言函數extern int f(void);c+中調用C語言函數extern“C“int f(void);c+中要一組c語言函數,則可以對所有c語言

9、函數采用連接規(guī)范:extern“C“double sqrt(double x); int f(void);家園家園-開發(fā)板商城/上海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“嵌入家園-開發(fā)

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家園家園-開發(fā)板商城/上海2.3.1 Stddef.h語法概要之定義#include<stddefh>#define typedef typedef typedefNULLptrdiff_t; size_tj wchar_t;#define offsetof(type,member-designato

11、r)家園家園-開發(fā)板商城/上海2.3.1 Stddef.hNULLnull指針常量0轉換為類型void的0ptrdiff_t實現定義的帶符號整型是兩個指針相減所得到的類型size_tsizeof運算符得到的無符號整型offsetof擴展一個整型常量表達式#define offsetof(type,memb)(size_t)&(type*)0)->memb)家園家園-開發(fā)板商城/上海2.3.1 Stddef.h例:對于sizeof(int)為4的字節(jié)尋址計算機#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家園家園-開發(fā)板商城/上海2.3.2 math.h雙精度浮點數的精度進行操作參數傳遞和錯誤處理如果傳遞過來的參數不在其定義域內,函數會返回一些不確定的值,并將變量errno置為EDOM。如果返回值太大,無法用一個double類型表示(造成上溢),這些函數會返回HUGEVAL,并將errno置為ERANGE。如果函數結

13、果太小,無法表示,則函數返回0,errno是否設置為ERANGE由實現確定EDOM,ERANGE和HUGEVAL都在mathh中定義。家園家園-開發(fā)板商城/上海2.3.3 ctype.h字符處理有兩類函數:分類與轉換分類函數的名稱以is開頭轉換函數的名稱以to開頭寬字符進行運算的分類與轉換函數分類函數isw轉換函數tow家園家園-開發(fā)板商城/上海2.3.3 ctype.h字符處理有兩類函數:分類與轉換分類函數的名稱以is開頭轉換函數的名稱以to開頭寬字符進行運算的分類與轉換函數分類函數isw轉換函數tow通用函數分類函數wcstrans與iswctrans轉換函數 wc

14、trans與towctrans家園家園-開發(fā)板商城/上海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;家園家園-開發(fā)板商城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)家園家園-開發(fā)板商城/上海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;家園家園-開發(fā)板商城/上海2.3.4 erron.hc語言實現通常定義一組標準錯誤碼:EDOM參數不在數學函數能接受的域中。例如log函數的參數不能為負數參數ERANGE 數學函數的結果超出范圍EILSEQ 翻譯多字節(jié)字符序列時遇到的編碼錯誤。這個錯誤最終會由mbrtowc或wcrtomb

17、發(fā)現,它們又被其他寬字符函數調用(c89增補l)函數strerror返回一個錯誤消息字符串的指針,其內容是由實現定義的,字符串不能修、但可以在后續(xù)調用strerror函數時覆蓋函數perror在標準錯誤輸出流中打印下面的序列:參數字符串s、冒號、空格、包errno中當前錯誤碼的錯誤短消息和新行符家園家園-開發(fā)板商城/上海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家園家園-開發(fā)板商城/上海2.3.5 bool、false、true語法概要#include<stdboolh>#define #define #define #definebool false true_Bool /*無符號整數類型,只能保存數值0和1 */ 01 bool_true_false_are_define 1家園家園-開發(fā)板商城/上海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家園家園-開發(fā)板商城/上海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函數終止程序流擴展)家園家園-開發(fā)板商城/上海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;家園-開發(fā)板商城 /上海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的值家園家園-開發(fā)板商城/上海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的值家園家園-開發(fā)板商城/上海2.3.8 string.hC 常用內存處理函數void *memy(void *destin,void *source, char ch,unsigned n)了ch,則返回直接跟隨ch的在destin中的字節(jié)的一個指針若Void * memcpy(void *destin,void *source,unsigned ,unsigned n)從source一個n字節(jié)的塊到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字節(jié)長的兩個字符串s1和s2.些函數按無符號字符比較字節(jié)家園家園-開發(fā)板商城/上海2.3.8 string.hC 常用內存處理函數int memicmp(void *s1,void *s2,unsigned n)比較s1和s2的前n個字節(jié),不管字符大寫或小寫.void *memmove(void *destin,void *source,

25、unsigned n)從source字節(jié)到destinvoid *memcpy(void *destin,void *source,unsigned n)從source字節(jié)到destinvoid *memset(void *s,char ch,unsigned n)將s的所有字節(jié)置于字節(jié)ch中.s數組的長度由n給出.家園家園-開發(fā)板商城/上海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);家園家園-開發(fā)板商城/上海2.3.9 stdarg.hstdargh中定義的宏、函數和類型的含義Va_list這種類型局部狀態(tài)變量,用于遍歷參數。Va_start這個宏初始化狀態(tài)變量ap,要先調用之后才能調用.將ap中的內部指針設置成指向傳入函數的第一個可變參數。Va_arg這個宏返回參數表中下一個參數的值,將內部參數指針(在ap中)移到下一個參數()。Va_end這個函數或宏在用va_arg

27、所有參數之后調用。Va_copy(C99)這個宏在dest中src的當前狀態(tài),在參數表中生成第二個指針。然后可以對src與dest采用va_arg。家園家園-開發(fā)板商城/上海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,);家園家園-開發(fā)板商城/上海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);上海/家園 開發(fā)板商城 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函數實現非本地跳轉處理異常例外情形家園家園-開發(fā)板商城/上海2.3.10 setjmp.hjmp_buf數組類型Setjmpenv是個由實現定義的數組返回0Longjmpenv是個由實現定義的數組返回status家園家園-開發(fā)板商城/上海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);家園家園-開發(fā)板商城/上海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);家園-開發(fā)板商城/上海2.3.11 signal.h運用特點信號是(潛在的)異步信號的觸發(fā)可以通過計算機的錯誤探測機制、用戶程序中的kill或raise函數以及程序外部

33、的操作用法:信號處理器是個用戶函數void my_handler(int the_signal)SIG_IGN signal(sig,SIG_IGN) SIG_DFL signal(sig, SIG_DFL)raise或gsignal函數在當前進程中發(fā)出指定的信號(或軟件信號)kill函數使特定進程中發(fā)出指定的信號家園家園-開發(fā)板商城/上海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”);家園家園-開發(fā)板商城/上海2.3.11 signal.h信號處理注意事項如果信號是由raise或gsignal發(fā)出的,則這些函數返回其調用者。如果信號是由abort發(fā)

35、出的,則標準c語言程序終止。其他實現可能返回abort的調用者。如果處理的信號是SIGFPE或另一實現定義的計算信號,則返回時的行為是未定義的。家園家園-開發(fā)板商城/上海2.4 標準庫應用總結編寫參數數目可變的函數字符標準C的異常處理機制對內存進行操作的標準庫函數C語言日期操作malloc()、calloc()、realloc()NULL和NUL的區(qū)別 非格式化輸入輸出函數家園家園-開發(fā)板商城/上海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 */家園家園-開發(fā)板商城/上海2.4.2 標準C的異常處理機制絕對終止條件結束 非

37、局部goto信號(Signals)公共變量家園家園-開發(fā)板商城/上海 絕對終止調用stdlib.habort: 粗魯地結束程序exit:文明地結束程兩者區(qū)別abort立即結束程序 ,不保存數據exit保存數據,執(zhí)行客戶用atexit的清除代碼家園家園-開發(fā)板商城/上海 絕對終止例#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、回碼給調用環(huán)境.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();家園-開發(fā)板商城/上海 非局部goto<setjmp.h > 中的setjmp與longjmp特點可以goto到任何地方在程序的任意它操作特點jmp_buf內容:程序位置指針、堆棧與框架指針,寄存器與內存值setjmp(j)設置goto指針setjmp可以標記相應的異常處理過程longjmp來終止異常longjmp(j, r)來goto到對象j指定的地方家園家園-開發(fā)板商城/上海 非局部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家園家園-開發(fā)板商城/上海 信號(Signals)<signal.h > 中的rai

43、se與signalraise來信號,并進入到相應的處理過程signal兩種安裝指定處理方法:* signal(SIG* signal(SIG, SIG_DFL),/使用系統(tǒng)默認的處理方法., SIG_IGN), /告訴系統(tǒng)忽略信號。實例void handler(int signal_value); void f(void)signal(SIGFPE, handler); /*/* . */處理過程*/raise(SIGFPE); /* 通過'SIGFPE'來調用處理過程*/家園家園-開發(fā)板商城/上海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;家園-開發(fā)板商城/上海2.4.4 對內存進行操作的標準庫函數mem

45、cmp() 與strncmp()memcmp遇到NULL字符時結束memcmp()函數不能用來比較結構的值例: 結構體比較struct fooshort s; long l;分析(32位系統(tǒng)環(huán)境)struct foo byte0 struct foo byte1 struct foo byte2 struct foo byte3 struct foo byte4 struct foo byte5s的低位字節(jié)s的字節(jié)無用信息(使l從一個long類型邊界開始) 無用信息(使l從一個long類型邊界開始) l的最低位字節(jié)l的次低位字節(jié)struct fo家l的園次字em節(jié)bedclub.costruc

46、t foo1的最字節(jié)上海家園 開發(fā)板商城2.4.4 對內存進行操作的標準庫函數strcpy() () 與memcpy ()strcpy()函數只能拷貝字符串,遇到NULL字符時結束memcpy()函數可以拷貝任意類型的數據,指定字節(jié)數使用規(guī)則拷貝字符串時,通常都使用strcpy()函數在拷貝其它數據時,通常都使用memcpy()函數。家園家園-開發(fā)板商城/上海2.4.4 對內存進行操作的標準庫函數例#include <stdio. h> #include <string. h>typedef struct cust_strint id ;char last_

47、name 20 ; char first_namel5; CUSTREC;家園家園-開發(fā)板商城/上海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) ;上海家園 開發(fā)板商城 日期概述Coordinated Universal Ti

50、me(UTC)世界標準時間Calendar Time:日歷時間epoch:時間點clock tick:時鐘計時單元家園家園-開發(fā)板商城/上海 計時C中的計時函數是clock()lock_t clock( void )#define CLOCKS_PER_SEC (clock_t)1000)家園家園-開發(fā)板商城/上海 計時實例:運行一個循環(huán)或者處理其它到底花了多少時間#i nclude “stdio.h” #i nclude “stdlib.h” #i nclude “time.h” int main( void )longi = 100000

51、00L;clock_t start, finish;doubleduration;/* 測量一個持續(xù)的時間*/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");家園-開發(fā)板商城 /上

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;家園家園-開發(fā)板商城/

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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論