- 论坛徽章:
- 0
|
下面是一个实际项目中的例子,为一个韩国项目中,外方提出的要求,当然可以通过C语言编程解决,但是如果
全部通过 SHELL 来实现,如何解决,各位高手帮忙想想办法。
要求: 对 .c 源程序进行如下的统计
1 统计空行行数
2 统计注释行行数
3 统计debug 行数
4 统计异常处理行数
注意事项:不能重复统计,要求得到净行数
解释:
1) 空行中有可能包含空格或 TAB 。
2) 注释行:位于/* 与 */ 之间的行。
3) debug行指位于 #ifdef DB[123] .... #endif 之间的行,要去掉中间的空行与注释行,
4) 异常处理行数指位于 if( iRet != 0 ){ 与匹配的 }之间的行(含标志行),要去掉中间的空行、注释行、debug 行。
源程序举例如下
a.c
#include <stdio.h>
main()
{
int iRet;
int iArgv;
char szArgv[ 80 ];
memset( szArgv, 0, sizeof( szArgv ) );
/* this is comment */
/* this is comment */
/* this is comment
this is comment2
*/
#ifdef DB1
/* 输出 DB1 级debug */
printf( " DB1 level debug \n" );
#endif
#ifdef DB2
/* 输出 DB2 级debug */
printf( " DB2 level debug \n" ); /* 注释,不算注释行数 */
#endif
#ifdef DB3
/* 输出 DB3 级debug */
printf( " DB3 level debug \n" );
#endif
iRet = iCallFun( iArgv, szArgv ); /* 注释,不算注释行数 */
if( iRet != 0 ){
#ifdef DB2
printf( " 出现错误\n" );
#endif
/* 注释行 */
printf( " 出现错误\n" ); /* 注释,不算注释行数 */
}
} |
|