C程序从同一个文件中删除注释

标签 c file-io comments

以下是从 C 程序中删除注释的代码,但删除注释的代码存储在另一个程序中。

#include<stdio.h>

main(int argc , char *argv[])
{
    FILE *fp;
    char ch;
    fp=fopen(argv[1],"r");
    fp1=fopen(argv[2],"w");

    while(1)
    {
        ch=fgetc(fp);
        if(ch==EOF)
                break;
        else
        {
                if(ch=='/')
                {
                        ch=fgetc(fp);
                        if(ch=='/')
                        {
                                while(1)
                                {
                                        ch=fgetc(fp);
                                        if(ch=='\n')
                                                goto label;
                                }
                        }
                        if(ch=='*')
                        {
                                while(1)
                                {
                                        ch=fgetc(fp);
                                        if(ch=='*')
                                        {
                                                ch=fgetc(fp);
                                                if(ch=='/')
                                                {
                                                        while(1)
                                                        {
                                                                ch=fgetc(fp);
                                                                goto label;
                                                         }
                                                }
                                                else
                                                        printf("*");
                                        }
                                }
                        }
                        else
                                printf("/");
                }
        }
        label:
                fputc(ch,fp1);
    }
    fclose(fp);
    fclose(fp1);
}

现在我想制作一个程序,从同一个文件中删除评论。所以当我们打开它时,评论不应该存在。请指导我,因为我不知道如何制作这样的程序?

最佳答案

这不是一项简单的任务,使用 fgetc 您的代码会在以下情况下失败:

char *s = "Comments starts with /*";

如果这不是练习并且您正在使用 gcc,我建议使用 fpreprocessed 标志跳过注释:

gcc -fpreprocessed -P -dD -E test.c > cleancode.c

然后用diff获取差异(注释):

diff -ignore-all-spaces test.c cleancode.c > comments.c

关于C程序从同一个文件中删除注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24607159/

相关文章:

java - 如何检测文件(具有任何扩展名)是否存在于java中

c - 使用 fread 时数据被打印两次

C 中的注释部分和注释 block

sql-server - 如何自动将注释 block 添加到 SQL Server 存储过程?

c - 创建邻接矩阵时出现问题

c - 具有十进制输入的递归函数以二进制形式打印从零到 n 的所有数字

c++ - 属性警告未使用结果相当于 Visual C

c++ - 奇怪的行为

perl - 在 Perl 中如何只注释掉一行的一部分?

c - 如何编写一个简单的基于文本的协议(protocol),最好是用 C