gpt4 book ai didi

c++ - 从源代码中删除 C++ 注释

转载 作者:太空狗 更新时间:2023-10-29 20:31:24 24 4
gpt4 key购买 nike

我有一些带有 /* */// 样式注释的 C++ 代码。我想有一种方法可以自动将它们全部删除。显然,使用带有一些正则表达式搜索 /**/// 的编辑器(例如 ultraedit)应该可以完成这项工作。但是,仔细观察,完整的解决方案并不是那么简单,因为序列/* 或//如果它们在另一个注释、字符串文字或字 rune 字中,则可能不代表注释。例如

printf(" \" \" " "  /* this is not a comment and is surrounded by an unknown number of double-quotes */");

是双引号内的注释序列。而且,确定一个字符串是否在一对有效的双引号内也不是一项简单的任务。虽然这

// this is a single line comment /* <--- this does not start a comment block 
// this is a second comment line with an */ within

是其他评论中的评论序列。

考虑到字符串文字和注释,是否有更全面的方法从 C++ 源代码中删除注释?例如,我们可以指示预处理器在不执行 #include 指令时删除注释吗?

最佳答案

C 预处理器可以删除注释。

编辑:

我已经更新,以便我们可以使用 MACROS 来扩展 #if 语句

> cat t.cpp
/*
* Normal comment
*/
// this is a single line comment /* <--- this does not start a comment block
// this is a second comment line with an */ within
#include <stdio.h>

#if __SIZEOF_LONG__ == 4
int bits = 32;
#else
int bits = 16;
#endif

int main()
{
printf(" \" \" " " /* this is not a comment and is surrounded by an unknown number of double-quotes */");
/*
* comment with a single // line comment enbedded.
*/
int x;
// A single line comment /* Normal enbedded */ Comment
}

因为我们希望 #if 语句正确展开,所以我们需要一个定义列表。
这是相对微不足道的。 cpp -E -dM

然后我们通过预处理器将#defines 和原始文件通过管道返回,但这次阻止包含被扩展。

> cpp -E -dM t.cpp > /tmp/def
> cat /tmp/def t.cpp | sed -e s/^#inc/-#inc/ | cpp - | sed s/^-#inc/#inc/
# 1 "t.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "t.cpp"






#include <stdio.h>


int bits = 32;




int main()
{
printf(" \" \" " " /* this is not a comment and is surrounded by an unknown number of double-quotes */");



int x;

}

关于c++ - 从源代码中删除 C++ 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4410532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com