【问题标题】:Stripping comments from c++ code while retaining line numbering从 C++ 代码中剥离注释,同时保留行号
【发布时间】:2016-04-23 23:53:25
【问题描述】:

我想从 c++ 文件中删除 cmets。这个post为此提供了以下解决方案:

gcc -fpreprocessed -dD -E test.c

但是,此命令似乎会折叠长的多行 cmets。如果使用宏 __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__-dependent 行为?" 听起来不是一个聪明的主意。你能详细说明一下这个用例吗?
  • 必须是 gcc 解决方案吗? a flex/c program 怎么样?
  • @πάνταῥεῖ 不幸的是,解释用例需要相当多的努力。我担心这可能会使原本定义明确的问题脱轨。
  • @Beta 不需要 gcc。我不熟悉 flex,但如果没有出现更好的东西,我可以查看您的链接答案。

标签: c++ gcc comments


【解决方案1】:

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

【讨论】:

  • 啊哈!我实际上在某种程度上简化了我的问题陈述——不是 gcc 的编译输出有__LINE__ 问题,而是一个 python 进程正在读取注释剥离的gcc -fpreprocessed -dD -E 输出并且未能逐行匹配原始源代码.现在我知道如何解释 # 指令,我可以适当地调整我的 python 脚本以正确匹配。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 2015-01-06
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
相关资源
最近更新 更多