Возможен ли самоизменяющийся код переносимым способом в C?
Причина, по которой я спрашиваю, заключается в том, что ООП в некотором смысле полагается на самоизменяющийся код (потому что код, который выполняется во время выполнения, фактически генерируется как данные, например, в 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? Действительно ли C поддерживает самоизменяющийся код?