【发布时间】: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,但如果没有出现更好的东西,我可以查看您的链接答案。