所以基本上我使用CIL(编写一些CIL扩展)来简化一些C代码,而我想要做的是消除指针的使用(因为指针的使用可能会在下一步中引起很多麻烦分析)
以下是代码:
void foo()
{
int a = 1;
int* p = &a;
int c = *p;
*p = 3;
}
我想在我的CIL扩展中维护一个指针引用关系的映射,简化的C代码可以是:
void foo()
{
int a = 1;
// int *p = &a; // map: {p : a} just eliminate this code, and create new entry in map
int c = a; // substitute based on map
a = 3; // substitute based on map
}
这是最容易的情况,看起来很有希望。
但事情可能变得复杂,例如返回一个指针(然后必须改变这个函数的类型,当然它在CIL中也很简单)
所以我的问题是:
以这种方式消除指针是否普遍可行?
有任何不确定的情况吗?
答案 0 :(得分:2)
我不确定你实际想要实现什么,但是消除所有指针使用几乎是不可能的。你可能能够消除一些用途(比如你的例子中相当简单的代码),但你很可能无法消除所有这些用法,因为间接用法是以很多有趣的方式使用的。
以链表为例。如果您尝试消除链接列表的指针,则需要为程序创建的每个列表节点指定一个名称。当然,您可以用数组替换列表(它涉及自己的指针算法),但这对二进制树没有帮助。这不是它的结束,有哈希表,在面向对象编程等对象之间实际上是任意链接。