是否可以在 C 中以可移植的方式进行自修改代码?
我问的原因是,在某种程度上,OOP 依赖于自我修改代码(因为在运行时执行的代码实际上是作为数据生成的,例如在 v 表中),然而,似乎,如果这太过分了,它会阻止编译器中的大多数优化。
例如:
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 真的支持自修改代码吗?