老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

c語言函數的封裝是啥意思,c語言 封裝

C語言怎么封裝自己寫的函數

用C語言的時候,您是否還在使用printf函數來輸出日志呢?您是否考慮過將printf函數打印的內容存到文件中去呢?您是否想擁有一個可選擇的既支持輸出到屏幕又支持存儲到文件中的日志函數呢?很高興的告訴您,如果您愿意的話,歡迎使用本人編寫的一個一套日志函數,該套函數由五部分組成,分別是宏變量BUF_SIZE、結構體log_st、log_init函數、log_debug函數和log_checksize函數。其中宏變量BUF_SIZE用來限制每次輸出的日志的最大長度;結構體用來存儲用戶需求,包括文件路徑、文件描述符號、單個文件最大大小、輸出方式標志、文件命名標志等;log_init函數用來完成用戶需求錄入、文件創建等功能,在mian函數的開始調用一次即可;log_debug函數的功能跟printf很類似,是在printf基礎上進行的擴充,實現將日志輸出到屏幕或者寫入到文件,在需要打印日志的地方調用該函數;log_checksize函數用來檢測日志文件大小是否超過最大大小限制,它需要您定時或者定點調用它,如果一直不調用,則日志文件將不受指定的最大大小限制。

成都創新互聯是一家專業提供三原企業網站建設,專注與成都網站建設、成都做網站、H5場景定制、小程序制作等業務。10年已為三原眾多企業、政府機構等服務。創新互聯專業網站制作公司優惠進行中。

一、定義宏變量BUF_SIZE

view plaincopy to clipboardprint?

#define?BUF_SIZE?1024

二、定義log_st結構體

view plaincopy to clipboardprint?

typedef?struct?_log_st?log_st;

struct?_log_st

{

char?path[128];

int?fd;

int?size;

int?level;

int?num;

};

三、定義log_init函數

參數說明:path——您要存儲的文件路徑;size——單個文件的最大大小,如果超過該大小則新建新的文件用來存儲;level——日志輸出方式,建議在上層限制其值的范圍為0到3,0表示日志既不輸出到屏幕也不創建文件和保存到文件,1表示日志保存到文件但不輸出到屏幕,2表示日志既輸出到屏幕也保存到文件,3表示日志只輸出到文件而不創建文件和存入文件;num——日志文件命名方式,非0表示以(int)time(NULL)作為文件名來保存文件,文件數量隨著日志量的遞增而遞增;0表示以“.new”和“.bak”為文件名來保存文件,文件數量不超過兩個,隨著日志量的遞增,舊的日志文件將被新的覆蓋,更直觀的說就是說.new”和“.bak”文件只保存最近的日志。

view plaincopy to clipboardprint?

log_st?*log_init(char?*path,?int?size,?int?level,?int?num)

{

char?new_path[128]?=?{0};

if?(NULL?==?path?||?0?==?level)?return?NULL;

log_st?*log?=?(log_st?*)malloc(sizeof(log_st));

memset(log,?0,?sizeof(log_st));

if?(level?!=?3)

{

//the?num?use?to?control?file?naming

log-num?=?num;

if(num)

snprintf(new_path,?128,?"%s%d",?path,?(int)time(NULL));

else

snprintf(new_path,?128,?"%s.new",?path);

if(-1?==?(log-fd?=?open(new_path,?O_RDWR|O_APPEND|O_CREAT|O_SYNC,?S_IRUSR|S_IWUSR|S_IROTH)))

{

free(log);

log?=?NULL;

return?NULL;

}

}

strncpy(log-path,?path,?128);

log-size?=?(size??0???size:0);

log-level?=?(level??0???level:0);

return?log;

}

四、定義log_debug函數

view plaincopy to clipboardprint?

void?log_debug(log_st?*log,?const?char?*msg,?...)

{

va_list?ap;

time_t?now;

char?*pos;

char?_n?=?'\n';

char?message[BUF_SIZE]?=?{0};

int?nMessageLen?=?0;

int?sz;

if(NULL?==?log?||?0?==?log-level)?return;

now?=?time(NULL);

pos?=?ctime(now);

sz?=?strlen(pos);

pos[sz-1]=']';

snprintf(message,?BUF_SIZE,?"[%s?",?pos);

for?(pos?=?message;?*pos;?pos++);

sz?=?pos?-?message;

va_start(ap,?msg);

nMessageLen?=?vsnprintf(pos,?BUF_SIZE?-?sz,?msg,?ap);

va_end(ap);

if?(nMessageLen?=?0)?return;

if?(3?==?log-level)

{

printf("%s\n",?message);

return;

}

if?(2?==?log-level)

printf("%s\n",?message);

write(log-fd,?message,?strlen(message));

write(log-fd,?_n,?1);

fsync(log-fd);

}

五、定義log_checksize函數

view plaincopy to clipboardprint?

void?log_checksize(log_st?*log)

{

struct?stat?stat_buf;

char?new_path[128]?=?{0};

char?bak_path[128]?=?{0};

if(NULL?==?log?||?3?==?log-level?||?'\0'?==?log-path[0])?return;

memset(stat_buf,?0,?sizeof(struct?stat));

fstat(log-fd,?stat_buf);

if(stat_buf.st_size??log-size)

{

close(log-fd);

if(log-num)

snprintf(new_path,?128,?"%s%d",?log-path,?(int)time(NULL));

else

{

snprintf(bak_path,?128,?"%s.bak",?log-path);

snprintf(new_path,?128,?"%s.new",?log-path);

remove(bak_path);?//delete?the?file?*.bak?first

rename(new_path,?bak_path);?//change?the?name?of?the?file?*.new?to?*.bak

}

//create?a?new?file

log-fd?=?open(new_path,?O_RDWR|O_APPEND|O_CREAT|O_SYNC,?S_IRUSR|S_IWUSR|S_IROTH);

}

}

封裝性只對面向對象編程而言的嗎?難道C不是嗎?C語言也分函數塊兒呢...

不嚴格來說,函數也具有封裝性,但它是對功能的封裝,而面向對象是對數據的封裝,具有更高的內聚度,內聚度是指一個模塊內部各成份的聯系。C 把函數和數據分開了,以數據的觀點來看C語言的封裝內聚度很低,幾乎等于零了,而我們想要封裝的數據,所以一般我們說封裝性都是說面向對象語言的

c語言定義函數是什么?

c語言定義函數是一段可以重復使用的代碼,用來獨立地完成某個功能,它可以接收用戶傳遞的數據,也可以不接收。

接收用戶數據的函數在定義時要指明參數,不接收用戶數據的不需要指明,根據這一點可以將函數分為有參函數和無參函數。

函數就是一段封裝好的,可以重復使用的代碼,它使得我們的程序更加模塊化,不需要編寫大量重復的代碼。函數可以提前保存起來,并給它起一個獨一無二的名字,只要知道它的名字就能使用這段代碼。

C語言特點及運用范圍:

C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用于底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。它既具有高級語言的特點,又具有匯編語言的特點。

C語言特點:簡潔的語言、具有結構化的控制語句、豐富的數據類型、豐富的運算符、可對物理地址進行直接操作、代碼具有較好的可移植性、可生成高質量、目標代碼執行效率高的程序。

C語言是一門面向過程的計算機編程語言,C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、僅產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。C語言描述問題比匯編語言迅速、工作量小、可讀性好、易于調試、修改和移植,而代碼質量與匯編語言相當。


當前名稱:c語言函數的封裝是啥意思,c語言 封裝
本文地址:http://www.xueling.net.cn/article/dseoddd.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 国内揄拍高清国内精品对白 | 男人的天堂视频精品乱在线 | 日韩中文字幕久久 | 日韩少妇内射免费播放18禁裸乳 | 久久久久女人精品毛片 | 久久亚洲精品ab无码播放 | 成年人免费看黄色片 | jizz日本在线 | 欧产日产国产精品v原神 | 精品国产乱子伦 | 日本黄色片一级 | 亚洲国产AV高清无码 | 免费无码又爽又刺激高潮 | 圆产精品久久久久久久久久久 | 午夜刺激爽爽视频免费观看 | 亚洲人成中文字幕在线观看 | 国产美女遭强高潮网站观看 | 午夜理论片一级毛片免费 | 手机永久无码国产AV毛片 | 中文字幕第一页卡通动漫在线 | 一二三四在线观看视频韩国 | 尤物AV无码国产在线观看 | 国产午夜三级一区二区三桃花影视 | 无码永久成人免费视频 | 免费的又色又爽又黄的视频本 | 无码免费H成年动漫在线观看网站 | jizzjizz日本护士视频 | 757福利视频 | 国产精品丝袜久久久久久不卡 | 一区二区和激情视频 | 777色淫网站女女免费 | 色999女| 天堂亚洲一区 | 国产足浴漂亮丰满技师av | 天天综合天天爱天天做天天爽 | 97视频在线视频 | 91视频在线?看网 | 久久精品国产亚洲av香蕉 | 久久黄色毛片 | 毛片久久| 8x在线观看 |