实现去除c语言注释的小工具



#include <stdio.h>
#include <stdbool.h>

int main() {
    int c, last_c = '\0';
    bool in_comment = false;
    bool in_string = false;

    while ((c = getchar()) != EOF) {
        if (in_string) {
            if (c == '"' && last_c != '\\') {
                in_string = false;
            }
            putchar(c);
        } else if (in_comment) {
            if (c == '*' && last_c == '/') {
                in_comment = false;
            }
        } else {
            if (c == '/' && last_c == '/') {
                // Skip to the end of the line
                while ((c = getchar()) != EOF && c != '\n');
                if (c == EOF) break;
                continue; // Skip the newline character
            } else if (c == '/' && last_c == '*') {
                in_comment = true;
            } else if (c == '"' && last_c != '\\') {
                in_string = true;
                putchar('"'); // Include the opening quote
            }
            putchar(c);
        }
        last_c = c;
    }

    return 0;
}

这段代码是一个简单的C语言程序,用于去除C语言代码中的单行和多行注释。它逐字符读取输入,并根据当前字符和前一个字符的状态来决定是否打印该字符。如果遇到了注释的开始(`//` 对于单行注释,`/*` 对于多行注释),则跳过相应的注释部分。同时,它也处理了字符串字面量,确保在字符串中的`/`不会被误认为是注释的开始。注意,这个程序假设输入是有效的C代码,并且没有处理一些特殊情况,比如字符串跨越多行或注释中的引号等。