【发布时间】:2010-11-20 15:12:20
【问题描述】:
谁能指出一个从 C 源代码中去除字符串的程序?示例
#include <stdio.h>
static const char *place = "world";
char * multiline_str = "one \
two \
three\n";
int main(int argc, char *argv[])
{
printf("Hello %s\n", place);
printf("The previous line says \"Hello %s\"\n", place);
return 0;
}
变成
#include <stdio.h>
static const char *place = ;
char * multiline_str = ;
int main(int argc, char *argv[])
{
printf(, place);
printf(, place);
return 0;
}
我正在寻找的是一个非常像stripcmt 的程序 只是我想剥离字符串而不是 cmets。
我正在寻找一个已经开发的程序而不仅仅是一些方便的正则表达式的原因是
因为当您开始考虑所有极端情况时(字符串中的引号、多行字符串等)
事情通常开始比最初看起来要复杂得多。和
REs 可以实现的目标是有限的,我怀疑这项任务是不可能的。
如果您确实认为自己有一个非常强大的正则表达式,请随时提交,但请不要天真的sed 's/"[^"]*"//g' 喜欢建议。
(不需要对 cmets 中的(可能未结束的)字符串进行特殊处理,这些将首先被删除)
支持嵌入换行符的多行字符串并不重要(不合法的 C 语言),但必须支持跨越多行以 \ 结尾的字符串。
【问题讨论】:
-
纯粹出于兴趣,为什么需要这样的工具?换句话说,您打算如何处理该工具的输出?
-
用于token搜索。例如“在哪些文件中调用了函数 x、y 和 z”。通过预处理、删除 cmets 和字符串,我将得到准确的结果。目前字符串正在产生噪音。
-
用懂C的代码分析工具不是更好吗?有很多。
-
我想将 find + xargs 与检查脚本一起使用(无需设置),其中该检查脚本在执行实际工作之前先剥离 cmets 和字符串(例如,可以检查如果文件调用 printf,则应包含
)。
标签: c string code-formatting utility reformatting