我的程序(2):c源码统计器

Linux----统计所有C语言源程序中,下列系统函数的被调用次数 Linux作业-------有一个文件夹,下面有许多个C语言源程序。要求编写一个程序,统计所有C语言源程序中,下列系统函数的被调用次数。 printf open close read write fork signal 统计结果输出到myresult.txt文件按中,格式如下: printf 49 open 13 close 13 read 24 write 16... 阅读详情

我的程序(2):c源码统计器

这是大二时数据结构的课程设计,要求用vc做一个有用户界面的程序.因为当时还不会用vc,所以在去年寒假用c写了一个没有界面的源码统计器,就算是课程设计的内核吧.

期间又该了多次,添加一些功能,增强安全性,对代码进行优化等,总共又5个版本.贴出来几个有代表性的,希望大家指正.

0.0版  :在键盘上输入程序,然后程序返回结果.

                      /*统计c中代码行和注释行的数量*/

#include<stdio.h>

 

void recomment(int c,int *pzhushi,int *phangshu,int *flagzhushi,int *flagzhw);

void in_comment(int *pzhushi,int *phangshu, int *flagzhushi,int *flagzhw);

void echo_quote(int c);

 

main()

{

int c;

    int nzhushi=0, nhangshu=0;   /* 记录注释和总行数*/

    int *pzhushi=&nzhushi;

    int *phangshu=&nhangshu;

    int *flagzhushi, *flagzhw;  /*标志:是否在注释或代码中*/

    *flagzhushi=0,  *flagzhw=0;

 

 

    while( (c=getchar())!=EOF )

        recomment(c,pzhushi,phangshu,flagzhushi,flagzhw);

 

    printf("%d,%d/n",*pzhushi,*phangshu);

    getch();

    return 0;

}   /*主函数完成*/

           

 

 

void recomment(int c,int *pzhushi,int *phangshu,int *flagzhushi,int *flagzhw)

{

 

     int d;

    if (c == '/'){

        if ( (d=getchar()) =='*' )

            in_comment(pzhushi,phangshu,flagzhushi,flagzhw);/* 进入注释处理函数*/

        else if ( d == '/' )

            recomment(d,pzhushi,phangshu,flagzhushi,flagzhw); /*递归*/

    }

 

    else if ( c == '/'' || c == '"' )

        echo_quote(c);                  /* 在引号内的注释不算*/

    else if ( c == '/n'){               /* 对回车的处理(考虑了各种情况)*/

        if(*flagzhushi == 1 )           /*如果此行有注释*/

            ++ (*pzhushi);

        if ( *flagzhw==1 )

            ++ (*phangshu);

        *flagzhw=*flagzhushi=0;

    }else if ( *flagzhw == 0 && c !=' ' )

        *flagzhw=1;

}   /*完成*/

            

 

void in_comment(int *pzhushi,int *phangshu, int *flagzhushi,int *flagzhw)

{

 

    int c,d;

 

    c=getchar();

    d=getchar();

    while ( c != '*' || d != '/' ){

        if ( c == '/n' ){

            ++ (*pzhushi);

            if ( *flagzhw == 1 )

                ++ (*phangshu);

        }

        c=d;

        d=getchar();

    }

    *flagzhushi=1;

}  /* 完成*/

 

 

 

void echo_quote(int c) 

{

    int d;

    while ( (d=getchar()) !=c )

        if ( d=='//')

            getchar();              /*忽略转义字符*/

}    /*完成*/

 

1.0版    主要对0.0版本中复杂的函数参数进行了修改,用一个结构指针解决问题.(谢谢csdn上面的朋友的指点)

/*统计c中代码行和注释行的数量*/

#include<stdio.h>

 

 struct fun{

     int ncomment;

     int ncode;

     int flagcomment;

     int flagcode;

 }a;

 struct fun *p=&a;

 

 

 

 

void recomment(int c,struct fun *p);

void in_comment(struct fun *p);

void echo_quote(int c);

 

main()

{

 

 

    int c;

 

 

    while( (c=getchar())!=EOF )

        recomment(c,p);

 

    printf("%d,%d/n",p->ncomment,p->ncode);

     getch();

    return 0;

}   /*主函数完成*/

           

 

 

 

 

    

void recomment(int c,struct fun *p)

{

 

     int d;

    if (c == '/'){

        if ( (d=getchar()) =='*' )

            in_comment(p);/* 进入注释处理函数*/

        else if ( d == '/' )

            recomment(d,p); /*递归*/

    }

 

    else if ( c == '/'' || c == '"' )

        echo_quote(c);                  /* 在引号内的注释不算*/

    else if ( c == '/n'){               /* 对回车的处理(考虑了各种情况)*/

        if(p->flagcomment == 1 )           /*此行有注释*/

            ++ (p->ncomment);

        if ( p->flagcode==1 )

            ++ (p->ncode);

        p->flagcode=p->flagcomment=0;

    }else if ( p->flagcode == 0 && c !=' ' )

       p->flagcode=1;

}   /*完成*/

           

 

void in_comment(struct fun *p)

{

 

    int c,d;

 

    c=getchar();

    d=getchar();

    while ( c != '*' || d != '/' ){

        if ( c == '/n' ){

            ++ (p->ncomment);

            if ( p->flagcode == 1 )

                ++ (p->ncode);

        }

        c=d;

        d=getchar();

    }

   p->flagcomment=1;

}  /* 完成*/

 

 

 

void echo_quote(int c) 

{

    int d;

    while ( (d=getchar()) !=c )

        if ( d=='//')

            getchar();              /*忽略转义字符*/

}    /*完成*/

 

3.0版本    不再由键盘输入程序,输入程序的路径即可.(但反斜杠问题没有解决0

/*统计c中代码行和注释行的数量*/

#include<stdio.h>

#include<stdlib.h>

 

 struct fun{

     int ncomment;

     int ncode;

     int flagcomment;

     int flagcode;

      FILE *pf;

 }a = {0,0,0,0,NULL};

 struct fun *p=&a;

 

 

 

 

void recomment(int c,struct fun *p);

void in_comment(struct fun *p);

void echo_quote(int c,struct fun *p);

 

main()

{

    int c;

     char s[50];

    

    printf("input the path of the file(注意;当输入反斜杠时,请连续输入两个)这个问题将在下一版中解决/n");

     scanf("%s",s);

   

    p->pf = fopen(s,"r");

    if( p->pf == NULL ){

        printf("open fail!/n");

        exit(0);

    }

 

    while( ( c=fgetc(p->pf) ) != EOF )

        recomment(c,p);

 

    printf("%d,%d/n",p->ncomment,p->ncode);

    fclose(p->pf);

    return 0;

}   /*主函数完成*/

           

 

 

 

 

void recomment(int c,struct fun *p)

{

 

     int d;

    if (c == '/'){

        if ( (d=fgetc(p->pf)) =='*' )

            in_comment(p);/* 进入注释处理函数*/

        else if ( d == '/' )

            recomment(d,p); /*递归*/

    }

 

    else if ( c == '/'' || c == '"' )

        echo_quote(c,p);                  /* 在引号内的注释不算*/

    else if ( c == '/n'){               /* 对回车的处理(考虑了各种情况)*/

        if(p->flagcomment == 1 )           /*此行有注释*/

            ++ (p->ncomment);

        if ( p->flagcode==1 )

            ++ (p->ncode);

        p->flagcode=p->flagcomment=0;

    }else if ( p->flagcode == 0 && c !=' ' )

       p->flagcode=1;

}   /*完成*/

           

 

void in_comment(struct fun *p)

{

 

    int c,d;

 

    c=fgetc(p->pf);

    d=fgetc(p->pf);

    while ( c != '*' || d != '/' ){

        if ( c == '/n' ){

            ++ (p->ncomment);

            if ( p->flagcode == 1 )

                ++ (p->ncode);

        }

        c=d;

        d=fgetc(p->pf);

    }

   p->flagcomment=1;

}  /* 完成*/

 

 

 

void echo_quote(int c,struct fun *p) 

 

{

    int d;

    while ( (d=fgetc(p->pf)) !=c )

        if ( d=='//')

            fgetc(p->pf);              /*忽略转义字符*/

}    /*完成*/

 

4.0版本 (最终版本)  可以直接输入程序的路径

/*统计c中代码行(不包括空白行)和注释行的数量*/

#include<stdio.h>

#include<stdlib.h>

 

 struct fun{

     int ncomment;

     int ncode;

     int flagcomment;

     int flagcode;

      FILE *pf;

 }a = {0,0,0,0,NULL};

 struct fun *p=&a;

 

 

void recomment(int c,struct fun *p);

void in_comment(struct fun *p);

void echo_quote(int c,struct fun *p);

char * change(char *ps,char *pt);      /*处理路径中的反斜杠问题。因为在字符串中要用//表示/ */

 

 

main()

{

    int c;

     char s[50];

     char t[100];

     char *ps = s;

     char *pt = t;

 

     printf("input the path of the file/n");

     scanf("%s",s);

 

    p->pf = fopen( change(ps,pt),"r" );     /*打开文件*/

    if( p->pf == NULL ){                   /*输入的文件路径不对或文件不存在*/

        printf("open fail!/n");

        exit(0);

    }                                   

    while( ( c = fgetc(p->pf) ) != EOF )

        recomment(c,p);

 

    printf("the commend lines are %d/n,the all code lines(not include black lines) are %d/n",p->ncomment,p->ncode);

    fclose(p->pf);                      /*关闭文件*/

    return 0;                                

}   /*主函数完成*/

           

 

 

 

 

void recomment(int c,struct fun *p)

{

 

     int d;

    if (c == '/'){

        if ( (d = fgetc(p->pf)) =='*' )

            in_comment(p);/* 进入注释处理函数*/

        else if ( d == '/' )

            recomment(d,p); /*递归*/

    }

 

    else if ( c == '/'' || c == '"' )

        echo_quote(c,p);                  /* 在引号内的注释不算*/

    else if ( c == '/n'){               /* 对回车的处理(考虑了各种情况)*/

        if(p->flagcomment == 1 )           /*如果此行有注释*/

            ++ (p->ncomment);

        if ( p->flagcode == 1 )            /*如果此行有代码*/

            ++ (p->ncode);

        p->flagcode = p->flagcomment = 0;     /*把标志复位*/

    }else if ( p->flagcode == 0 && c != ' ' )

       p->flagcode = 1;

}   /*完成*/

           

 

void in_comment(struct fun *p)      /*寻找注释结束的地方*/

{

 

    int c,d;

 

    c = fgetc(p->pf);

    d = fgetc(p->pf);

    while ( c != '*' || d != '/' ){

        if ( c == '/n' ){

            ++ (p->ncomment);

            if ( p->flagcode == 1 )

                ++ (p->ncode);

        }

        c = d;

        d = fgetc(p->pf);

    }

   p->flagcomment = 1;

}  /* 完成*/

 

 

 

void echo_quote(int c,struct fun *p) 

 

{

    int d;

    while ( (d = fgetc(p->pf)) !=c )

        if ( d == '//')

            fgetc(p->pf);              /*忽略转义字符*/

}    /*完成*/

 

 

char * change(char *ps,char *pt)     /*处理反斜杠的问题*/

{

     char *p = pt;

     char c;

 

     while( (c = *pt++ = *ps++) != '/0' )

         if( c == '//' )

              *pt = '//';

     return p;

}

 

        

 

 

 

全开源B2B2C商城搭建--H5+小程序+源码定制 全开源的B2B2C商城搭建需要多方面的技能和经验支持,包括服务器环境搭建、商城系统的选择和配置、H5和小程序的开发以及源码的定制等。常见的开源商城系统有Ubercart、OpenCart、PrestaShop等。在这里,我们以Ubercart为例,介绍如何进行全开源的B2B2C商城搭建。随着互联网的快速发展,越来越多的企业开始搭建自己的B2B2C商城。其中,全开源的B2B2C商城因为其灵活性和可定制性,备受企业青睐。本文将详细介绍如何搭建全开源的B2B2C商城,包括H5、小程序和源码定制的步骤。 阅读详情

相关推荐

【C语言进阶】使用gettimeofday为你的程序运行时间做统计

有时候在编程调试的时候,会遇到个别性能问题需要调试,这时候我们需要比较精确地统计每段代码的耗时情况,这种情况下,你是怎么做的呢?本文介绍一种方法来实现此功能

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 1万+

[转]源代码统计工具集合

最近想在github上寻找一个合适的项目进行学习,然后发现每次都要完全下载并在工具里才能查看代码行数,给我的寻找带来了很大的不便,经查询后发现一些方法,但网上的很多教程都不够详细,因此在这写我解决这个问题的详细过程,希望给大家带来帮助。 一、下载安装CLOC 首先我们要进行代码统计工具CLOC的下载安装 下载连接:https://github.com/AlDanial/cloc/releases 我在写博客时最新的版本是1.88,所以这里就下载1.88版本的,大家可以自行下载...

皮牙子快跑的博客 1299

源码统计工具

NULL 博文链接:https://jxncyun.iteye.com/blog/1322360

XCounter (源码统计工具 /代码统计工具)

XCounter (源码统计工具/代码统计工具) 支持统计语言: c语言、c++语言、c#语言、java语言和python语言 (后期版本将会加入其它相关语言) 目录 XCounter (源码统计工具/代码统计工具) 下载路径: 运行界面 统计结果界面 导出报告 目前网上纯粹的代码统计工具相对比较少,有一款国外的软件sourcecounter,支持导出报告,但是该款软件比较老旧,没...

qazwsxwtc的专栏 1172

源码统计器v1.1

1.1版更新介绍   岁月如梭,光阴似箭,想不到离上次1.0版推出已有1年多时间^-^。在《源码统计器》推出的这一年内,许多朋友给我来信,指出其中的不足,并有许多很好的建议和鼓励,特别要感谢如下几位:Johnson Jiang、zhangxiao、jp.xie、佟晓艺、徐雷、xwing、司徒达擎、ltzhou、Hunter、birdie。   由于过去的一年多时间内工作很忙,而且我目前从事的已不再是软件开发类的工作,因此一直无暇更新。今年春节假期终于得到几天空闲,能够将自己以往的思路重新整理一下,对《源码统计器》做一些更新工作。由于更新不大,因此只升级为1.1版。 主要更新的地方有: 1、 原版本统计如下代码时出错 /*……*/……/*…… 由于我原先没考虑到同一行内有两个地方注释,并且从该行开始进入注释语句(/*)。还有如下语句也统计错误: /*/ 1 //*/ 可能是对类似于/*/的情况处理不当。如下语句统计也有问题 CString str = ";;;;;;;abc//de";;;;;;;;;;;;;;; 因为未考虑到字符串换行的情况。 另外,1.0版对rc文件统计也不正确。 我对统计算法进行了彻底改写,以上错误均已更正。 2、 增加了";;;;;;;设置";;;;;;;按钮,使用户可以自己设置统计方法。就是当代码和注释语句处于同一行时,作何处理。1.0版本是作为代码行计数,但有网友反映有时需要分开计数。因此新版本增加了这项功能,用户可以根据需要自己设置成: ①只作为代码行处理; ②代码行和注释行各增加一行 ③只作为注释行处理; 按第一种方式和第三种方式统计,代码行+注释行+空白行一定等于总行数,而第二种方式统计代码行+注释行+空白行大于总行数,两者之差就是既有代码又有注释符的行数。《源码统计器》缺省设置为第二种统计方法。 ";;;;;;;设置";;;;;;;对话框中用户还可以设置日志文件的路径,这个文件我主要是用来记录统计中可能出现的错误。目前能记录cpp文件中字符串换行但没有用结尾的问题。 3、 增加了将统计结果保存为Excel文件的功能。 4、 增加了动态图标。 5、 其他还做了一些小改动,不再一一说明。 1.1版的《源码统计器》也如原版本一样,源代码完全开放。若你需要,可来信索取,我的Email是:xiaogi@sohu.com。你也可以到我的个人主页下载:http://xiaogi.nease.net。 软件介绍:   在工作中,我们经常碰到客户要求我们告之所写程序的行数,包括代码行、注释行和空白行等。这一软件就是为这一目的编写的。最先是用于对我自己写的C/C++,VC++程序进行行数统计。它可以准确快速地统计出源代码中的各种行数。后来经过不断改进,增加了对VB, Java, ASP,JSP和SQL等程序的源代码的统计,使得软件的应用范围更加广泛。网络上也有不少类似统计行数的软件,但到目前为止,我发现“源码统计器1.1版”统计速度是最快的,而且相比较发现更加准确,考虑到了源代码中可能出现的许多特殊情况。 软件优点: 1、 准确无误。这当然是任何一款源代码统计工具所必需具备的功能。为此,我自建了一个测试用的cpp文件(test.cpp),在其中我设计了多个遵循c++的注释方式,但又很容易导致统计错误的";;;;;;;陷阱";;;;;;;。虽然有些注释语句看起来有点奇怪,但的确合理并且真实存在。统计该测试文件时即使出现1行的统计误差也是不允许的,否则在统计某个恰好用该种方式注释的程序时误差就可能很大。经测试,“源码统计器1.1版”能准确无误地统计出test.cpp的各种代码行数。 2、 更加快速。由于算法选取和文件处理得当,“源码统计器1.1版”的统计速度相当迅速。 3、 界面友好,易于上手。";;;;;;;源码统计器1.1版";;;;;;;界面说明清楚,相信任何人都能轻松上手。本软件无需安装,解压缩后可直接运行。 4、 功能丰富,智能统计。本软件可以统计多种源码,包括C/C+、VC++、VB、Java、ASP、JSP、SQL和TXT文件。可以将统计结果汇总保存为文本文件或csv文件,其中csv文件可被绝大部分统计软件识别(包括微软Office系列的Excel),方便今后进一步整理统计源码。“源码统计器1.1版”还可以根据用户输入的文件扩展名自动调用相应的统计方法。 5、 源代码公开,方便用户根据自己的需要进行修改,添加对特殊文件的统计。 添加方法概述如下:假设你要添加对扩展名为";;;;;;;*.my";;;;;;;的文件统计。首先,在CountingDlg.h中定义宏: #define TYPE_MY 16 然后在CCountingDlg::OnInitDialog()中添加该类型到m_structExtention结构体: m_structExtention.arrayType.Add(";;;;;;;my";;;;;;;);;;;;;;; m_structExtention.nType[0] = TYPE_MY;;;;;;;; 再在IsSearchingFor(CString strFileName)中添加判断,使得当strFileName为my类型时返回TRUE。 在类CCountingDlg中添加函数GetMyFileLines(),具体统计算法请在该函数内自己实现。 最后在CountThread线程中加入判断,如果文件类型为TYPE_MY,则调用函数GetMyFileLines ( )进行统计。 具体操作可参考源代码相应的处理。 6、 软件所使用的资源绝大部分位于资源文件中,便于用户更改其语言版本以用在其它语言的操作系统上。(这也是本软件下一版本要追加的一个功能:自动识别操作系统语言并载入相应的资源包) 使用方法: ◆ 在“文件名或文件类型”组合框中输入你需要进行统计的文件类型(如:*.cpp;;;;;;;;*.c;;;;;;;;*.h)。扩展名之间用;;;;;;;;,:分隔,;;;;;;;;,:前后有空格亦无妨,软件会自动忽略。你也可以直接输入需要统计的文件名(如:counting.cpp;;;;;;;; setting.c;;;;;;;; resource.h)。同样的,文件名之间也用;;;;;;;;,:分隔。点击下拉框可以选择软件缺省为你提供的几种文件类型,点击右边的按钮可以手动指定需要进行统计的文件(可多选,并且软件自动将选中文件的所在目录放入";;;;;;;搜索文件夹";;;;;;;组合框中)。 ◆ 在“搜索文件夹”组合框中输入你需要进行统计的文件所在的文件夹(如: d:study),点击下拉框可以选择近几次进行统计的文件夹。如果你手动输入的文件夹不在下拉框中,软件在统计开始后自动将该文件夹加入。点击右边的按钮可以选择文件夹。 ◆ 你可以选择统计时是否也需要统计子文件夹中的相关文件。 ◆ 点击";;;;;;;统计";;;;;;;按钮开始,再次点击该按钮停止统计。 ◆ 若你需要保存统计结果,请点击";;;;;;;保存";;;;;;;按钮。你可以选择以文本文件、Excel文件或csv文件三种格式保存。其中csv文件可被几乎所有的统计软件识别,包括微软Office系列的Excel。 ◆ 在列表控件中双击文件名可打开该文件。 ◆ 软件可稳定地运行于MS Windows系列操作系统上。 作者声明:   本软件为自由软件,源代码完全公开。你可以来信索要并不受限制地利用,但务请保留作者的版权信息。若你觉得本软件对你有帮助或你需要将其中部分的代码用到自己的软件中,请给作者来信告知。如果你对本软件有好的建议或bug发现,也请来信告知。本软件将不断更新升级,最新版本请到我的个人主页下载。 我的Email:xiaogi@sohu.com 个人主页:http://xiaogi.nease.net

源码统计器1.1版(源码+软件)

  岁月如梭,光阴似箭,想不到离上次1.0版推出已有1年多时间^-^。在《源码统计器》推出的这一年内,许多朋友给我来信,指出其中的不足,并有许多很好的建议和鼓励,特别要感谢如下几位:Johnson Jiang、zhangxiao、jp.xie、佟晓艺、徐雷、xwing、司徒达擎、ltzhou、Hunter、birdie。   由于过去的一年多时间内工作很忙,而且我目前从事的已不再是软件开发类的工作,因此一直无暇更新。今年春节假期终于得到几天空闲,能够将自己以往的思路重新整理一下,对《源码统计器》做一些更新工作。由于更新不大,因此只升级为1.1版。 主要更新的地方有: 1、 原版本统计如下代码时出错 /*……*/……/*…… 由于我原先没考虑到同一行内有两个地方注释,并且从该行开始进入注释语句(/*)。还有如下语句也统计错误: /*/ 1 //*/ 可能是对类似于/*/的情况处理不当。如下语句统计也有问题 CString str = "abc\ //de"; 因为未考虑到字符串换行的情况。 另外,1.0版对rc文件统计也不正确。 我对统计算法进行了彻底改写,以上错误均已更正。 2、 增加了"设置"按钮,使用户可以自己设置统计方法。就是当代码和注释语句处于同一行时,作何处理。1.0版本是作为代码行计数,但有网友反映有时需要分开计数。因此新版本增加了这项功能,用户可以根据需要自己设置成: ①只作为代码行处理; ②代码行和注释行各增加一行 ③只作为注释行处理; 按第一种方式和第三种方式统计,代码行+注释行+空白行一定等于总行数,而第二种方式统计代码行+注释行+空白行大于总行数,两者之差就是既有代码又有注释符的行数。《源码统计器》缺省设置为第二种统计方法。 "设置"对话框中用户还可以设置日志文件的路径,这个文件我主要是用来记录统计中可能出现的错误。目前能记录cpp文件中字符串换行但没有用\结尾的问题。 3、 增加了将统计结果保存为Excel文件的功能。 4、 增加了动态图标。 5、 其他还做了一些小改动,不再一一说明。 新软件的界面为: 1.1版的《源码统计器》也如原版本一样,源代码完全开放。若你需要,可来信索取,我的Email是:xiaogi@sohu.com。你也可以到我的个人主页下载:http://xiaogi.nease.net。 软件介绍:   在工作中,我们经常碰到客户要求我们告之所写程序的行数,包括代码行、注释行和空白行等。这一软件就是为这一目的编写的。最先是用于对我自己写的C/C++,VC++程序进行行数统计。它可以准确快速地统计出源代码中的各种行数。后来经过不断改进,增加了对VB, Java, ASP, Perl和Shell等程序的源代码的统计,使得软件的应用范围更加广泛。网络上也有不少类似统计行数的软件,但到目前为止,我发现“源码统计器1.0版”统计速度是最快的,而且相比较发现更加准确,考虑到了源代码中可能出现的许多特殊情况。 软件优点: 1、 准确无误。这当然是任何一款源代码统计工具所必需具备的功能。为此,我自建了一个测试用的cpp文件(test.cpp),在其中我设计了多个遵循c++的注释方式,但又很容易导致统计错误的"陷阱"。虽然有些注释语句看起来有点奇怪,但的确合理并且真实存在。统计该测试文件时即使出现1行的统计误差也是不允许的,否则在统计某个恰好用该种方式注释的程序时误差就可能很大。经测试,“源码统计器1.0版”能准确无误地统计出test.cpp的各种代码行数。 2、 更加快速。由于算法选取和文件处理得当,“源码统计器1.0版”的统计速度相当迅速。 3、 界面友好,易于上手。"源码统计器1.0版"界面说明清楚,相信任何人都能轻松上手。本软件无需安装,解压缩后可直接运行。 4、 功能丰富,智能统计。本软件可以统计多种源码,包括C/C+、VC++、VB、Java、ASP、Perl、Shell和TXT文件。可以将统计结果汇总保存为文本文件或csv文件,其中csv文件可被绝大部分统计软件识别(包括微软Office系列的Excel),方便今后进一步整理统计源码。“源码统计器1.0版”还可以根据用户输入的文件扩展名自动调用相应的统计方法。 5、 源代码公开,方便用户根据自己的需要进行修改,添加对特殊文件的统计。 添加方法概述如下:假设你要添加对扩展名为"*.my"的文件统计。首先,在CountingDlg.h中定义宏: #define TYPE_MY 18 然后在CCountingDlg::OnInitDialog()中添加该类型到m_structExtention结构体: m_structExtention.arrayTy

探索高效代码管理:SourceCounter - 你的源码统计利器

探索高效代码管理:SourceCounter - 你的源码统计利器 是一个简洁且强大的开源工具,专为开发者设计,用于统计源代码文件的数量、行数等信息。无论是进行项目规模评估,还是在开发过程中监控代码变化,SourceCounter 都可以提供直观的数据支持。 技术分析 SourceCounter 基于 Python 编写,这意味着它具有良好的跨平台性,可以在 Windows, macOS, Lin...

gitblog_00080的博客 1229

好用的源码统计器.zip

源码统计器可以统计代码量,简单的源代码统计工具(统计源代码行数、工数、成本、质量指标统计) ,不用安装方便好用

源代码统计工具(SourceCounter) - 使用说明

源代码统计工具(SourceCounter)主页 主窗口 统计设定区域 “添加...” - 打开“添加源代码目录”对话框 “删除” - 删除选中的源代码目录 “选择” - 打开“选择代码类型”对话框 “递归统计子目录” - 统计所有的子目录 “更多设定...” - 打开“更多设定”对话框 状态 -

boom's works 8676

SourceStat源代码统计器

这是最简单最快速的源码统计器,全部开放源代码,不管工程多大,目录级数多深,均能在简单的规则下,可视化获得结果,支持三种数据导出方式,Excel,XML,TxT,总有一种适合你。

VHDL实战:基于EDA的数字频率计(FREQ)设计与优化

本文详细介绍了使用VHDL语言和EDA工具设计并优化数字频率计(FREQ)的全过程。从核心原理与模块划分入手,深入讲解了时钟分频、测频控制、计数锁存及显示驱动等关键模块的VHDL实现,并提供了从代码编写、功能仿真到综合布局布线的完整EDA实战指南。文章还探讨了测量精度优化、资源权衡及跨时钟域处理等进阶话题,是掌握FPGA数字系统设计的经典案例。

milk8的博客 583

AI 智能名片商城小程序源码:构建 F2B2b2C 用户触达新生态

1.1 研究背景在当今数字化时代,企业对于用户的触达变得愈发关键。F2B2b2C 模式作为一种新兴的商业模式,旨在通过整合厂商(F)、批发商(B)、零售商(b)和消费者(C)的资源,实现高效的供应链管理和用户连接。然而,在实际操作中,F2B2b2C 模式面临着诸多挑战。一方面,信息的不对称性可能导致各环节之间的沟通不畅,影响产品的流通效率。另一方面,传统的营销手段难以满足亿级用户体量的需求,如何实现精准触达成为了亟待解决的问题。1.2 研究目的随着科技的不断发展,AI 智能名片商城小程序源码应运而生。本研究

专注MarTech应用研究与实施方案 1418

基于opencv-ANN的水果识别模型训练

本文通过opencv-ann-mlp训练模型,实现对五种水果进行分类识别。本文详细介绍该项目的各个过程,包括数据准备、预处理、样本读取、训练数据集制作、训练标签制作、模型参数设置、模型训练,模型测试验证等,总结该过程需要注意的事项。

qq_15985873的博客 3971

开源 AI 智能名片 S2B2C 商城小程序源码:C 端用户连接的创新策略与价值

在数字化时代,企业与 C 端用户的连接至关重要。开源 AI 智能名片 S2B2C 商城小程序源码在连接 C 端用户方面展现出强大策略和巨大价值。其通过集客营销策略、创新开店模式、链动 2+1 模式与 S2B2C 商城模式以及多渠道方式连接 C 端用户。从策略上,内容创作与分发、社交媒体互动等精准吸引潜在客户;构建 B 私域并激励调动 B 端;利用智能名片功能和团队奖励机制扩大用户群体。从价值上,为企业提供高效工具构建私域流量池,实现精准营销和高效管理,为消费者提供优质便捷购物体验。

专注MarTech应用研究与实施方案 1591

【SystemVerilog项目实践】4.AHB-SRAMC(验证计划)

验证计划

托马斯的博客 3659

JMeter脚本录制-快速上手篇

有的项目应用场景下,压测时,需要考虑带宽因素,压测不只是压测接口,静态资源也要一起压测。一般来说,静态资源比较多,如果一个个手工去写请求,是比较繁琐的,此时,可以使用Jmeter的脚本录制功能。 步骤1,创建脚本录制模版。 JMeter菜单:文件>模版,下拉选择到Recording,点击“Create”按钮; 填写录制参数: hostToRecord:填写要录制的主机域名,例如,我们这里填入:www.baidu.com schemeToRecord:填写要录制的模式,例如,htt...

软件测试大叔 5734

基于51单片机数量统计器

本文设计了一种基于51单片机的数量统计器系统,采用STC89C52作为主控芯片,结合TCRT5000红外传感器实现物体自动检测与计数。系统包含检测、显示和交互模块,具有响应快(≤10ms)、精度高(误差≤0.5%)和低成本(约50元)的特点。软件采用C语言开发,具备防抖动验证和溢出保护功能。实际应用显示,该系统在流水线和零售场景中较人工计数效率提升80%,误差率仅0.3%。未来可扩展无线传输和数据存储功能,进一步拓展应用范围。

QQ1928499906的博客 971

高效 DEM 拼接

通过以上步骤的系统实施,能够实现高效、准确的大型地理信息系统 DEM 数据拼接,满足复杂和大规模项目的应用需求。

llhllq2015的博客 1032

C语言运动会分数统计程序

运动会分数统计程序的设计(2人)运动会分数统计任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。功能要求:1). 可以输入各个项目的前三名或前五名的成绩;2).能统计各学校总分,3).可以按学校编号、学校总分、男女团体总分排序输出;

程序设计 1485

Dify工作流自动化:如何用Trae AI助手10倍提升你的开发效率(含避坑指南)

本文详细介绍了如何利用Trae AI助手自动化生成Dify工作流,实现开发效率的10倍提升。通过构建DSL示例库、精准需求描述和四步实战法,开发者可将重复的配置工作交给AI,快速生成可运行的工作流,并提供了关键的避坑指南。

weixin_29062865的博客 369

Android 10.0 SystemUI 屏蔽状态栏消息推送弹出的悬浮通知

在状态栏中,有一些通知类似 消息推送 弹出的 悬浮通知,弹出30秒之后会消失掉 要想屏蔽掉这些通知,首选知道这些通知是怎么产生的 通知类型 NotificationContentInflater.java 详细的介绍各种通知的类型 frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java /** * The defau

安卓兼职framework和app工程师的博客 1542

一个统计字数的程序

统计字数的程序读取输入的字符并报告其中的单词个数。处理时有可以统计字符个数和行数。来看看这样一个程序包含哪些步骤。 首先,这个程序应该逐个读取字符,并且应该有些方法判断何时停止;第二,他应该能够识别并统计下列单位:字符、行和单词。下面是伪代码描述: read a character while there is more input increment character count  

samuel 5431

GameFramework框架详解之 DataTable配置表模块

一.前言: DataTable模块是项目的配置表模块,配置表一般是从excel导出csv/json/xml格式的,之所以是excel作为源文件,原因是因为策划同学使用配表最方便。然后一键导出到项目中,除了csv/json/xml配置文件外,一般还会伴随着导出配置的实体类,这样研发同学就可以使用了。GameFramework的DataTable模块也是秉持着这种一贯的策略来实现的。 二.DataRow DataRow在excel数据表中,对应的是一行数据,而在代码中对应的其实就是一条数据对象。 接口IData

TxNet 4724

C语言实例第7期:实现投票统计功能

C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分析 VS2019编写简单的C程序示例 简单示例,VS2019调试C语言程序 C语言基础-基本算法 C语言基础-数据类型 C语言中的输入输出函数 C语言流程控制语句 C语言数组——一维数组 C语言数组——二维数组 C语言数组——字符数组 C语言中常用的6个字符串处理函

专注于C语言编程干货分享 4031

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C语言实现英文词频统计(附带源码)

本文详细介绍了如何使用C语言实现英文词频统计程序,从项目背景、需求分析、设计思路、完整代码实现、代码详细解读到项目总结与扩展思考,层层解析了文本读取、单词分割、哈希表统计、排序输出以及内存管理等关键技术。通过本项目,读者不仅可以掌握使用C语言处理文本数据和统计英文单词出现次数的方法,还能深入了解哈希表等数据结构的实现原理及其在实际应用中的作用。

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1190

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: c语言学习零碎整理(7):数组名是指针吗?
下一篇: 你知道linux怎么读吗?也许你一直读的都是错的.呵呵
wayne92
博客等级 码龄23年 55粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值