在C语言中,是否有一种可移植的方式实现自修改代码?
我问这个问题的原因是,从某种程度上说,面向对象编程依赖于自修改代码(因为在运行时执行的代码实际上是作为数据生成的,例如在虚表中),但是,如果这种方式被过度使用,它将阻止大多数编译器优化。
例如:
void add(char *restrict p, char *restrict pAddend, int len)
{
for (int i = 0; i < len; i++)
p[i] += *pAddend;
}
优化编译器可以将 *pAddend
提升出循环,因为它不会干扰 p
。然而,在自修改代码中,这不再是一个有效的优化。
因此,似乎 C 不允许自修改代码,但同时,这是否意味着你不能在 C 中做一些像面向对象编程(OOP)的事情?C 真的支持自修改代码吗?