⑴ 使用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||'