【问题标题】:how to auto refactor C for loops如何自动重构 C for 循环
【发布时间】:2018-10-09 22:02:47
【问题描述】:

我有一个非常大的旧代码库,我正在慢慢更新。

在大部分代码中,for loops 执行基本的数学例程,我想回调一个函数,即进行更改

for(int i=0;i< NUM_EL; i++)
{
   x[i] = a[i] * b[i];
}

vector_multiply(a,b,x,NUM_EL);

vector_multiply 的原型在哪里

void vector_multiply(const double *a, const double * b, double *x, int num_el);

是否有任何东西可以扫描您的源代码并将标准数学运算转换为回调例程?

更具体地说,会更改您的代码以自动在您的代码中进行 blas 回调?

我猜我可以使用 libclang 来做到这一点。

【问题讨论】:

    标签: c refactoring automated-refactoring libclang


    【解决方案1】:

    我不相信这可以完全自动完成而不会引入错误。

    但是,您可以使用 perl 脚本并手动查看更改。

    perl -0777 -pe 's/for\s*\(\s*int\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*0;\s*\1\s*<\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*;\s*\1\s*\+\+\s*\)\s*\{\s*([a-zA-Z_][a-zA-Z0-9_]*)\[\1\]\s*=\s*([a-zA-Z_][a-zA-Z0-9_]*)\[\1\]\s*\*\s*([a-zA-Z_][a-zA-Z0-9_]*)\[\1\]\s*;\s\}/vector_multiply(\4,\5,\3,\2);/igs' test.c
    

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 2016-08-19
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多