统计代码的行数 c实现

来源:互联网 发布:国家顶级域名us 编辑:程序博客网 时间:2024/05/20 10:55

做一个小项目快一个月了,今天和同学聊着聊着,同学问我写了多少行代码?

是啊,我写了多少行代码呢?


同学建议我随便在网上找一个shell脚本代码就能知道有多少行代码,为什么不用万能的

C语言去实现呢?

于是有了此文,思路很简单,大致是传入一个文件路径或者是文件名,然后我写了一个遍历函数去寻找

.c和.h文件,并得到相应的行数。


代码如下:


int read_dir(char* filename, int mode, int* pline_num){int ret = 0;char file[256] = {0};char file_path[256] = {0};DIR* dir = opendir(filename);char end_file[64] = {0};int n_name = 0;if(!dir){ printf ("open dir failure\n");ret = -1;return ret;}struct dirent* ent = NULL;while( ent = readdir(dir)){if(ent->d_type == DT_DIR){if(mode == 1){continue;}if(!memcmp(ent->d_name, ".", 1)||!memcmp(ent->d_name,"..",2)){continue;}sprintf(file_path, "%s/%s", filename, ent->d_name);read_dir(file_path, mode, pline_num);memset(file_path, 0, sizeof(file_path));continue;}else{n_name = get_dot_name(ent->d_name, end_file);if( n_name == 1 && \(!memcmp(end_file, "c", 1) || !memcmp(end_file,"h",1))){sprintf (file, "%s/%s", filename, ent->d_name);*pline_num += get_line(file);}memset(end_file, 0, sizeof(end_file));memset(file, 0, sizeof(file));}}return ret;}

mode 为希望程序查找的模式,若mode为1则只查找当前目录下的文件,否则查找目录下的文件和文件夹

int get_line(char* filename){FILE* fp = NULL;int line_num = 0;fp = fopen(filename, "r+");char c = 0;if(fp){while( (c = fgetc(fp)) != EOF){if(c == '\n'){++line_num;}}++line_num;}fclose(fp);fp = NULL;return line_num;}int get_dot_name(char* filename, char* dot_name){int n_name = 0;char c = 0;while( (c=*filename++) != '.'){if(c == '\0'){return n_name;}}while((*dot_name++ = *filename++) != '\0'){++n_name;}return n_name;
}


以上只是获取文件行数简单功能的实现。如有更好的方法,望多多交流。

0 0
原创粉丝点击