⑴ 使用c語言封裝一個函數
您好,對於你的遇到的問題,我很高興能為你提供幫助,我之前也遇到過喲,以下是我的個人看法,希望能幫助到你,若有錯誤,還望見諒!。展開全部
用C語言的時候,您是否還在使用printf函數來輸出日誌呢?您是否考慮過將printf函數列印的內容存到文件中去呢?您是否想擁有一個可選擇的既支持輸出到屏幕又支持存儲到文件中的日誌函數呢?很高興的告訴您,如果您願意的話,歡迎使
一、定義宏變數BUF_SIZE
view plain to clipboardprint?
#define BUF_SIZE 1024
二、定義log_st結構體
view plain to clipboardprint?
typedef struct _log_st log_st;
struct _log_st
{
char path[128];
int fd;
int size; 非常感謝您的耐心觀看,如有幫助請採納,祝生活愉快!謝謝!
⑵ C語言中的類分為哪些成員函數介面封裝數據成員
類有基類和派生類,類成員包括私有成員、公有成員,受保護成員。私有一般是數據成員,公有成員一般為函數成員。函數成員可以有構造函數、函數成員(或叫介面),也可以封裝(我的理解是內連函數),友元函數(可以訪問類私有數據,但不是成員函數)、析構函數!
⑶ C語言封裝與分離是怎麼的概念 盡量具體點
主要是函數的定義和調用要分開。
就是不能在同一個源文件中定義所有的函數,特別是程序代碼特別多的時候。可以將函數的定義放在其他源文件中,只在main函數所在的文件中調用(記得包括相對應的頭文件,並聲明函數)。這樣一來,他人或自己在對讀程序或修改的時候,就容易的多。只要逐項檢查每個函數,以及調用過程中的邏輯順序就可以簡單定位出程序的錯誤,或對某些函數處理進行修改。
⑷ 封裝性只對面向對象編程而言的嗎難道C不是嗎C語言也分函數塊兒呢...
不嚴格來說,函數也具有封裝性,但它是對功能的封裝,而面向對象是對數據的封裝,具有更高的內聚度,內聚度是指一個模塊內部各成份的聯系。C 把函數和數據分開了,以數據的觀點來看C語言的封裝內聚度很低,幾乎等於零了,而我們想要封裝的數據,所以一般我們說封裝性都是說面向對象語言的
⑸ c語言代碼,可以像c++一樣封裝嗎
封裝或者面向對象是編程思想,C或C++只是工具,沒什麼好比的。C或者C++都可以用來寫面向對象的程序,只是說C++會方便一些或者說對人會友好一點,C更直接或者說更貼近機器。
⑹ c語言中可封裝指啥
應該是指結構struct,可以將若干不同類型的數據封裝起來
⑺ 如何封裝C語言的字元串相關功能
C語言是沒有類的,因此,沒有封裝的概念,估計你說的是C++,對於C++,一般封裝字元串相關功能可以按下列內容和步驟,但不限於下列內容:
(1)先定義1個數據結構可以用來表達一個字元串實體,如一個字元串指針,一定長度的字元數組(適合長度限制在某個值的情況),或由一個指針及長度組成的結構或更復雜的數據鏈表等。
(2)基於上面的數據結構定義1個封裝類,這個類需要定義1些不同參數的構建函數,可以滿足不同類型數據初值的初始化,如:初值是個字元串、初值是個整數、初值是個浮點數等;
(3)定義和實現這個類的操作符和比較符,一般字元串的操作符至少包括 +(2個字元連接成一個新串),+=(2個字元串連接後,賦予符號左邊的實體),=(復制),比較符可以是全部如:>、>=,<,<=,==,!=。
(4)定義這個類的類型轉換符,一般至少包括double,int
(5)定義這個類的一些常用函數,如左右截取,取長度,查找子串等。
具體你可以參考ATL 或C++ 中標准string類的定義。
如果你確定問的是C語言,那麼不支持功能封裝。
⑻ C語言是怎樣實現封裝,繼承,多態的
封裝,繼承,多態的是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函數用來檢測日誌文件大小是否超過最大大小限制,它需要您定時或者定點調用它,如果一直不調用,則日誌文件將不受指定的最大大小限制。
一、定義宏變數BUF_SIZE
view plain to clipboardprint?
#defineBUF_SIZE1024
二、定義log_st結構體
view plain to clipboardprint?
typedefstruct_log_stlog_st;
struct_log_st
{
charpath[128];
intfd;
intsize;
intlevel;
intnum;
};
三、定義log_init函數
參數說明:path——您要存儲的文件路徑;size——單個文件的最大大小,如果超過該大小則新建新的文件用來存儲;level——日誌輸出方式,建議在上層限制其值的范圍為0到3,0表示日誌既不輸出到屏幕也不創建文件和保存到文件,1表示日誌保存到文件但不輸出到屏幕,2表示日誌既輸出到屏幕也保存到文件,3表示日誌只輸出到文件而不創建文件和存入文件;num——日誌文件命名方式,非0表示以(int)time(NULL)作為文件名來保存文件,文件數量隨著日誌量的遞增而遞增;0表示以「.new」和「.bak」為文件名來保存文件,文件數量不超過兩個,隨著日誌量的遞增,舊的日誌文件將被新的覆蓋,更直觀的說就是說.new」和「.bak」文件只保存最近的日誌。
view plain to clipboardprint?
log_st*log_init(char*path,intsize,intlevel,intnum)
{
charnew_path[128]={0};
if(NULL==path||0==level)returnNULL;
log_st*log=(log_st*)malloc(sizeof(log_st));
memset(log,0,sizeof(log_st));
if(level!=3)
{
//thenumusetocontrolfilenaming
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;
returnNULL;
}
}
strncpy(log->path,path,128);
log->size=(size>0?size:0);
log->level=(level>0?level:0);
returnlog;
}
四、定義log_debug函數
view plain to clipboardprint?
voidlog_debug(log_st*log,constchar*msg,...)
{
va_listap;
time_tnow;
char*pos;
char_n=' ';
charmessage[BUF_SIZE]={0};
intnMessageLen=0;
intsz;
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 ",message);
return;
}
if(2==log->level)
printf("%s ",message);
write(log->fd,message,strlen(message));
write(log->fd,&_n,1);
fsync(log->fd);
}
五、定義log_checksize函數
view plain to clipboardprint?
voidlog_checksize(log_st*log)
{
structstatstat_buf;
charnew_path[128]={0};
charbak_path[128]={0};
if(NULL==log||3==log->level||'