【发布时间】: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