#include <stdio.h>
#include <string.h>
char *comment;
void act_null(char *src)
{
}
void act_mark(char *src)
{
comment = src;
}
void act_remove(char *src)
{
int len = src - comment;
memset(comment,' ',len+2);
}
void act_remove2(char *src)
{
int len = src - comment;
memset(comment,' ',len);
}
int state_trans_table[6][6] =
{
{0,3,0,0,0,0},
{0,3,2,3,4,5},
{2,2,3,2,2,2},
{0,3,2,3,4,5},
{4,4,4,4,4,3},
{0,1,2,3,4,5}
};
void (*act_table[6][6])(char *src) =
{
{act_null,act_remove,act_null,act_null,act_null,act_null},
{act_mark,act_null,act_null,act_null,act_mark,act_null},
{act_null,act_null,act_null,act_null,act_null,act_null},
{act_mark,act_null,act_null,act_null,act_mark,act_null},
{act_null,act_null,act_null,act_null,act_null,act_remove2},
{act_null,act_null,act_null,act_null,act_mark,act_null}
};
int get_input_type(char *src)
{
if(strncmp(src,"/*",2) == 0)
return 0;
else if(strncmp(src,"*/",2) == 0)
return 1;
else if(strncmp(src,"\"",1) == 0)
return 2;
else if(strncmp(src,"//",2) == 0)
return 4;
else if(strncmp(src,"\n",1) == 0)
return 5;
else
return 3;
}
char *remove_comment(char *src)
{
int state = 3;
int input = 3;
char *dest = src;
while(*src != '\0')
{
input = get_input_type(src);
act_table[state][input](src);
state = state_trans_table[state][input];
src++;
}
return dest;
}
int main(int argc ,char *argv[])
{
FILE *fpsrc;
FILE *fpdest;
char *namepath;
char *dest;
char buf[10240] = {0};
int len;
if(argc != 2)
{
printf("Usage: ./a.out pathname\n");
return ;
}
namepath = argv[1];
if((fpsrc = fopen(argv[1],"r+")) == NULL)
{
printf("open srcfile error!\n");
return ;
}
strcat(namepath,".out.c");
if((fpdest = fopen(namepath,"w")) == NULL)
{
printf("open dest error!\n");
return ;
}
len = fread(buf,1,sizeof(buf),fpsrc);
buf[len] = '\0';
printf("src(len = %d):\n%s",len,buf);
fclose(fpsrc);
dest = remove_comment(buf);
fwrite(dest,1,len,fpdest);
printf("dest:\n%s",dest);
return 0;
}
移出c程序注释
最新推荐文章于 2025-05-18 22:31:00 发布