您的位置:首页 > 编程语言 > C语言/C++

C/C++ Comment Remover 0 By DaNmarner Released

2006-11-27 11:15 218 查看
记得《The C Programming Language》写有一道练习就是写一个去掉注释的程序,今天把它重写了一遍,发现好简单啊。这个小程序是我在cmd下面用vim+gcc+gdb敲出来的算是热热手。

我把它叫做C/C++ Comments Remover ,这个版本是0。实现了删除/**/和//两种注释的基本功能。

用法是:ccr 源文件.c [目标文件.c]

如果没有目标文件,就产生一个 源文件_CCRed.c的输出文件。

这个CCR00.zip里有代码和可执行程序

代码如下:




/**//*


* C/C++ CommentRemover 0 by DaNmarner


* DaNmarner@gmail.com Http://blog.csdn.net/DaNmarner

* Just basiclly remove the comments


* 10/27/2006


*/


#include<stdio.h>


#include<string.h>


#include<stdlib.h>


#define DEBUG_




void do_quote(void);


int rcomment(void);


void showhelp(void);




FILE *src_f,*dest_f;




int main(int argc,char *argv[])




...{


char dest[256];


int rmn=0;


char c1;






if (argc!=2 && argc!=3) ...{


showhelp();


return 0;


}






if((src_f=fopen(argv[1],"r"))==NULL)...{


printf("Error opening file %s ",argv[1]);


return 0;


}


if(3==argc) strcpy(dest,argv[2]);




else ...{


strcpy(dest,argv[1]);


strcpy(strrchr(dest,'.'),"_CCRed");


strcat(dest,strrchr(argv[1],'.'));


}




if((dest_f=fopen(dest,"w"))==NULL)...{


printf("Error creating file %s ",dest);


return 0;


}




#ifdef DEBUG


dest_f=stdout;


#endif




while((c1=fgetc(src_f))!=EOF)...{


if(c1=='/')


rmn+=rcomment()?1:0;


else if(c1=='"') do_quote();




else if(c1=='/')...{


fputc(c1,dest_f);


if((c1=fgetc(src_f))!=EOF)


fputc(c1,dest_f);


}else fputc(c1,dest_f);


}


printf((rmn==0)?" No C/C++ comment exists, ":


" Successfully removed %d commments! ",rmn);


printf("Please check output file %s ",dest);


return 0;


}


void showhelp(void)




...{


puts(" C/C++ Comment Remover by DaNmarner 2006.11");


puts("Http://blog.csdn.net/DaNmanrer DaNmarner@gmail.com ");


puts(" Function: Remove Comments of C/C++ sytle from source file.");


puts(" Useage: ccr SourceFile [Destination] ");


}




int rcomment(void)




...{


int c,itis=1;


if((c=fgetc(src_f))==EOF) exit(0);


else


if(c=='/')


while((c=fgetc(src_f))!=' ' && c!=EOF);




else if(c=='*') ...{


int in_comment=1;




while(in_comment)...{


c=fgetc(src_f);


if (c==EOF) exit(0);


else if (c=='*')


if((c=fgetc(src_f))=='/')


in_comment=0;


else if(c==EOF) exit(0);


}




}else...{


fputc('/',dest_f);


fputc(c,dest_f);


itis=0;


}


return itis;


}




void do_quote(void)




...{


int c,in_quote=1;


fputc('"',dest_f);


while(in_quote)


if((c=fgetc(src_f))==EOF) exit(0);




else...{




if(c=='/')...{


fputc('/',dest_f);


fputc(fgetc(src_f),dest_f);




} else if(c=='"')...{


fputc(c,dest_f);


in_quote=0;


}else fputc(c,dest_f);


}


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: