相关疑难解决方法(0)

从C/C++代码中删除注释

有没有一种简单的方法可以从C/C++源文件中删除注释而无需进行任何预处理.(也就是说,我认为你可以使用gcc -E,但这会扩展宏.)我只想要删除注释的源代码,不应该改变任何其他内容.

编辑:

对现有工具的偏好.我不想用正则表达式自己写这个,我预见代码中有太多的惊喜.

c c++ comments

67
推荐指数
4
解决办法
6万
查看次数

如何从C源文件中删除所有/**/注释?

我有一个C文件,我从其他地方复制,但它有很多评论如下:

int matrix[20];
/* generate data */
for (index = 0 ;index < 20; index++)
matrix[index] = index + 1;
/* print original data */
for (index = 0; index < 5 ;index++)
Run Code Online (Sandbox Code Playgroud)

如何删除/* 和所包含的所有注释*/.有时,评论由4-5行组成,我需要删除所有这些行.

基本上,我需要删除之间的所有文字/**/甚至\n能之间进入.请帮助我使用其中一个sed,awkperl.

regex unix perl awk sed

14
推荐指数
4
解决办法
7840
查看次数

如何在使用sed或awk预处理C/C++代码时可靠地定位函数?

我希望通过使用sed/awk预处理源文件来直接检测我的代码.我不能使用其他方法,如调试器跟踪或gcc选项-finstrument-functions.在最后一种情况下,地址以某种我无法管理的方式重新定位,我错过了与符号表的对应关系.这里介绍的其他方法(ptrace,etrace,callgraph等)或者在这里可以很好地用于一个简单的例子,但不是在我的真实项目中.

问题在于,在处理大型开源项目时,函数的编写标准不仅在C和C++文件之间不同,而且通常在同一文件中.的{可以是在参数列表的结尾,或在另一行,结构或分配可使用的起始{,制作简单功能解析假.

因此,在函数定义的开头插入宏的上述链接中提供的解决方案通常不起作用,并且通过手工代码行(KLOC)进行校正是不可行的.

sed 's/^{/{ENTRY/'
Run Code Online (Sandbox Code Playgroud)

那么,如何使用在sed或awk中使用的正则表达式可靠地定位C/C++代码中的函数定义?可能通过使用gcc预编译代码的一部分?我正在寻找一些可能在船上的东西.

c c++ regex awk sed

3
推荐指数
1
解决办法
132
查看次数

如何在源代码中查找搜索词

我正在寻找一种方法来搜索项目的C/C++代码中的给定术语,同时忽略注释和字符串中的任何出现.

由于代码库相当大,我正在寻找一种方法来自动识别与我的搜索词匹配的代码行,因为它们需要手动检查.

如果可能的话,我想在我的linux系统上执行搜索.

背景

所讨论的代码库是一个带有大量第三方插件的实时信号处理引擎.插件是用各种语言实现的(大多数是C语言,但也有C++和其他语言;目前我只关心这两种语言),没有强制执行任何标准.

我们的代码库目前使用内置类型float的浮点数,我们想用一个typedef允许我们使用双精度的代码.我们希望float在实际代码中找到所有出现的内容(忽略评论和打印输出中的合法用法).

更进一步的是,在代码有效负载中有一些(虽然很少)合法使用float(因此我们真的在寻找一种方法来识别所有需要手动检查的地方,而不是运行一些自动搜索和替换. )

代码还包含C样式的静态强制转换(float),因此依靠编译器警告来识别类型不匹配通常不是一种选择.

代码库由超过3000个(C和C++)文件组成,累积约750000行代码.

代码是跨平台的(linux,osx,w32是主要目标;但也是freebsd和类似的),并使用各种本机编译器(gcc/g ++,clang/clang ++,VisualStudio,...)进行编译.

至今...

到目前为止,我正在使用丑陋的东西:

 grep "\bfloat\b" | sed -e 's|//.*||' -e 's|"[^"]*"||g' | grep "\bfloat\b"
Run Code Online (Sandbox Code Playgroud)

但我认为必须有一些更好的方法来搜索有效载荷代码.

c c++ grep

3
推荐指数
1
解决办法
371
查看次数

Awk与我的所有参赛作品都不匹配

我正在尝试制作一个"脚本" - 本质上是一个awk命令 - 在.c文件中提取C代码函数的原型,以自动生成一个头.h.我是awk的新手,所以我没有得到所有细节.

这是源.c的示例:

dict_t dictup(dict_t d, const char * key, const char * newval)
{

  int i = dictlook(d, key);

  if (i == DICT_NOT_FOUND) {

    fprintf(stderr, "key \"%s\" doesn't exist.\n", key);
    dictdump(d);
  }
  else {

    strncpy(d.entry[i].val, newval, DICTENT_VALLENGTH);
  }

  return d;
}


dict_t* dictrm(dict_t* d, const char * key) {

  int i = dictlook(d, key);

  if (i == DICT_NOT_FOUND) {

    fprintf(stderr, "key \"%s\" doesn't exist.\n", key);
    dictdump(d);
  }
  else {
    d->entry[i] = d->entry[--d.size];
  }
  if ( ((float)d->size)/d.maxsise …
Run Code Online (Sandbox Code Playgroud)

regex awk text-extraction header-files

2
推荐指数
1
解决办法
247
查看次数

标签 统计

awk ×3

c ×3

c++ ×3

regex ×3

sed ×2

comments ×1

grep ×1

header-files ×1

perl ×1

text-extraction ×1

unix ×1