从 C++ 代码中剥离注释,同时保留行号

Stripping comments from c++ code while retaining line numbering

我想从 C++ 文件中删除注释。 post 为此提供了以下解决方案:

gcc -fpreprocessed -dD -E test.c

但是,此命令似乎会折叠较长的多行注释。如果使用宏 __LINE__,这会导致行为差异。

是否可以挽救 gcc 解决方案以不改变 __LINE__ 依赖行为?或者,非 gcc 解决方案也可以正常工作。

示例test.c:

int main() {
        /*
         *
         *
         *
         *
         * comment 1
         */
        // comment 2
        return 0;
}

使用 gcc 4.9.2 的输出:

$ gcc -fpreprocessed -dD -E test.c
# 1 "test.c"
int main() {
# 10 "test.c"
 return 0;
}

如果我们删除 // comment 2,那么我们将获得所需的输出而不会折叠注释:

$ gcc -fpreprocessed -dD -E test.c
# 1 "test.c"
int main() {







 return 0;
}

在 GCC 中,带有数字和文件名的 # 指令对应于行号,因此保持适当的 __LINE__ 值。