【问题标题】:about remove/replace struct关于删除/替换结构
【发布时间】:2019-06-06 13:58:53
【问题描述】:

我有一个使用结构的 C 语言代码,包括初始化结构的函数和函数调用。现在我想删除结构的使用。由于代码执行的问题,以及大量的代码和复杂的结构,我无法手动更改这些。函数和结构,所以我必须找到一种自动化的方法。下面的代码是一个简单的例子。 有没有更好的方法或想法?

#include<stdio.h>

struct A
{
  int a;
  int b;
};

struct A add(int x, int y)
{
  struct A t;
  t.a = x + y;
  return t;
}

int main()
{
  struct A t = add(3, 4);
  printf("t.a = %ld\n", t.a);
  return 0;
}

收件人:

#include<stdio.h>

int main()
{
  int A_a = 3;
  int A_b = 4;
  int A_a_b = A_a + A_b;
  printf("%d\n", A_a_b);
  return 0;
}

【问题讨论】:

  • 听起来您可能需要编写自己的脚本来执行此操作。但考虑到它需要的理解水平,这可能并不容易。似乎需要某种程度的解析。
  • 除非您的代码完全简单,否则这将非常困难。并且看起来与您应该做的相反(例如,如果代码很复杂,请定义更好的抽象,而不是将所有内容都分解为美化的汇编。)
  • 如果结构使您的代码复杂化,那么您的设计一定是错误的。结构或对象的想法是简化过程。因此,与其寻找绕过结构的方法,不如学习正确使用结构。
  • 是的,结构或对象的想法是简化过程。但是这里还有其他所有问题。事实上,我最终没有在 C 语言中这样做,而是在着色器(glsl)中这样做。目前该结构体的初始化在高通处理器平台上会出现一些问题,所以在程序中必须避免使用该结构体。我想让更多人更容易理解我的问题,所以我以c语言为例。如果你有兴趣,这里是这个问题的着色器测试代码。查看github.com/verybigzhouhai/struct-init-test-on-qualcomm-platform
  • 你需要的是一个用来操作源代码的工具。尽管有些存在于 C 语言中,但这些非常罕见。我怀疑着色器语言是否存在任何东西,因此您需要构建一个自定义工具。这可能需要一段时间和一些技巧,因此可能不值得付出努力。但是,如果您坚持,您可以考虑将我们的 DMS 软件再工程工具包作为基础。 www.semanticdesigns.com/Products/DMS/DMSToolkit.html

标签: c compiler-construction abstract-syntax-tree


【解决方案1】:

你试过antlr吗?

我猜你想重构下面的代码。

包括

/*
struct A
{
  int a;
  int b;
};
*/

/*
struct A add(int x, int y)
{
  struct A t;
  t.a = x + y;
  return t;
}
*/

int main()
{
/*
  struct A t = add(3, 4);
*/  
  int A0_t_a; //t.a
  int A0_t_b; //t.b
  {
    //add(3, 4)
    int x = 3;
    int y = 4;

    //struct A t;
    int A1_t_a;
    int A1_t_b;

    //t.a = x + y
    A1_t_a = x + y;

    //return t
    A0_t_a = A1_t_a;
    A0_t_b = A1_t_b;
  }

/*
  printf("t.a = %ld\n", t.a);
*/
  printf("t.a = %ld\n", A0_t_a);  
  return 0;
}

【讨论】:

  • 这不是答案。
猜你喜欢
  • 2012-02-18
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多